/** * @brief 加载配置文件 * @param void * @return void */ void LoadProfile (void) { FILE *fp; char buf[PATH_MAX], *pbuf, *pbuf1; int i; Configure *tmpconfig; /* 前将窗口的位置设定为最原始的默认值,接下来如果配置文件有, * 会从配置文件中读取,如果没有就使用这个了*/ iMainWindowX = MAINWND_STARTX; //主窗口位置X iMainWindowY = MAINWND_STARTY; //主窗口位置Y iInputWindowX = INPUTWND_STARTX; //输入窗口位置X iInputWindowY = INPUTWND_STARTY; //输入窗口位置Y fp = UserConfigFile ("profile", "rt", NULL); if(!fp){ if(errno == ENOENT) SaveProfile(); return; } /* FIXME: 也许应该用另外更恰当的缓冲区长度 */ while(fgets(buf, PATH_MAX, fp)){ i = strlen(buf); if(buf[i-1] != '\n'){ fprintf(stderr, "error: profile file: line length\n"); exit(1); }else buf[i-1] = '\0'; pbuf = buf; while(*pbuf && isspace(*pbuf)) pbuf++; if(!*pbuf || *pbuf == '#') continue; pbuf1 = strchr(pbuf, '='); if(!pbuf1){ fprintf(stderr, "error: profile file: configure entry name\n"); exit(1); } for(tmpconfig = profiles; tmpconfig->name; tmpconfig++) if(strncmp(tmpconfig->name, pbuf, pbuf1-pbuf) == 0) read_configure(tmpconfig, ++pbuf1); } fclose(fp); iIMIndex = iIMIndex_tmp; /* piaoairy add 20080518 */ if(bNeedSaveConfig){ SaveConfig(); SaveProfile(); } }
EAP_FUNC_EXPORT eap_status_e eap_wimax_authentication_c::configure() { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("partner calls: eap_wimax_authentication_c::configure(): %s\n"), (m_is_client == true) ? "client": "server")); EAP_TRACE_RETURN_STRING(m_am_tools, "returns to partner: eap_wimax_authentication_c::configure()\n"); //---------------------------------------------------------- EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, (EAPL("calls: eap_wimax_authentication_c::configure(): m_am_wauth->configure(): %s.\n"), (m_is_client == true) ? "client": "server")); eap_status_e status = m_am_wauth->configure(); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_disable_traces(m_am_tools); eap_status_e status = read_configure( cf_str_EAP_TRACE_disable_traces.get_field(), &EAP_TRACE_disable_traces); if (status == eap_status_ok && EAP_TRACE_disable_traces.get_is_valid_data() == true) { u32_t *disable_traces = reinterpret_cast<u32_t *>( EAP_TRACE_disable_traces.get_data(sizeof(u32_t))); if (disable_traces != 0 && *disable_traces != 0) { m_am_tools->set_trace_mask(eap_am_tools_c::eap_trace_mask_none); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_activate_only_trace_masks_always_and_error(m_am_tools); eap_status_e status = read_configure( cf_str_EAP_TRACE_activate_only_trace_masks_always_and_error.get_field(), &EAP_TRACE_activate_only_trace_masks_always_and_error); if (status == eap_status_ok && EAP_TRACE_activate_only_trace_masks_always_and_error.get_is_valid_data() == true) { u32_t *activate_trace_mask_always = reinterpret_cast<u32_t *>( EAP_TRACE_activate_only_trace_masks_always_and_error.get_data(sizeof(u32_t))); if (activate_trace_mask_always != 0 && *activate_trace_mask_always != 0) { m_am_tools->set_trace_mask( eap_am_tools_c::eap_trace_mask_always | eap_am_tools_c::eap_trace_mask_error ); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_activate_trace_on_error(m_am_tools); eap_status_e status = read_configure( cf_str_EAP_TRACE_activate_trace_on_error.get_field(), &EAP_TRACE_activate_trace_on_error); if (status == eap_status_ok && EAP_TRACE_activate_trace_on_error.get_is_valid_data() == true) { u32_t *activate_trace_on_error = reinterpret_cast<u32_t *>( EAP_TRACE_activate_trace_on_error.get_data(sizeof(u32_t))); if (activate_trace_on_error != 0 && *activate_trace_on_error != 0) { m_am_tools->set_activate_trace_on_error(); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_enable_timer_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_timer_traces.get_field(), &EAP_TRACE_enable_timer_traces); if (status == eap_status_ok && EAP_TRACE_enable_timer_traces.get_is_valid_data() == true) { u32_t *enable_timer_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_timer_traces.get_data(sizeof(u32_t))); if (enable_timer_traces != 0 && *enable_timer_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | TRACE_FLAGS_TIMER ); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_enable_timer_queue_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_timer_queue_traces.get_field(), &EAP_TRACE_enable_timer_queue_traces); if (status == eap_status_ok && EAP_TRACE_enable_timer_queue_traces.get_is_valid_data() == true) { u32_t *enable_timer_queue_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_timer_queue_traces.get_data(sizeof(u32_t))); if (enable_timer_queue_traces != 0 && *enable_timer_queue_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | TRACE_FLAGS_TIMER_QUEUE ); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_enable_ok_return_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_ok_return_traces.get_field(), &EAP_TRACE_enable_ok_return_traces); if (status == eap_status_ok && EAP_TRACE_enable_ok_return_traces.get_is_valid_data() == true) { u32_t *enable_ok_return_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_ok_return_traces.get_data(sizeof(u32_t))); if (enable_ok_return_traces != 0 && *enable_ok_return_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | TRACE_FLAGS_OK_RETURNS ); } } } //---------------------------------------------------------- { eap_variable_data_c EAP_TRACE_enable_message_data_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_message_data_traces.get_field(), &EAP_TRACE_enable_message_data_traces); if (status == eap_status_ok && EAP_TRACE_enable_message_data_traces.get_is_valid_data() == true) { u32_t *enable_message_data_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_message_data_traces.get_data(sizeof(u32_t))); if (enable_message_data_traces != 0 && *enable_message_data_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | EAP_TRACE_FLAGS_MESSAGE_DATA ); } } } //---------------------------------------------------------- // Create stack if it does not already exist. status = create_upper_stack(); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } // All of the configuration options are optional. // So we return OK. return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); }
/** * @brief 读取用户的配置文件 * @param bMode 标识配置文件是用户家目录下的,还是从安装目录下拷贝过来的 * @return void */ void LoadConfig (Bool bMode) { FILE *fp; char buf[PATH_MAX], *pbuf, *pbuf1; //用于标示group的index,在配置文件里面配置是分组的,类似与ini文件的分组 int group_idx; int i; Configure *tmpconfig; for (i = 0;i < INPUT_METHODS; i++ ) inputMethods[i] = 1; //用以标识是否是重新读取配置文件 bIsReloadConfig = bMode; fp = UserConfigFile("config", "rt", NULL); if(!fp && errno == ENOENT){ /* $HOME/.fcitx/config does not exist */ snprintf(buf, PATH_MAX, PKGDATADIR "/data/config"); /* zxd add begin */ if( access( buf, 0 ) && getenv( "FCITXDIR" ) ) { strcpy( buf, getenv( "FCITXDIR" ) ); strcat( buf, "/share/fcitx/data/config" ); } /* zxd add end */ fp = fopen(buf, "rt"); if(!fp) SaveConfig(); } if (fp) { group_idx = -1; /* FIXME: 也许应该用另外更恰当的缓冲区长度 */ while(fgets(buf, PATH_MAX, fp)){ //每次最多读入PATH_MAX大小的数据 i = strlen(buf); /*fcitx的配置文件每行最多是PATH_MAX个字符,因此有上面的FIXME*/ if(buf[i-1] != '\n'){ fprintf(stderr, "error: configure file: line length\n"); exit(1); } else buf[i-1] = '\0'; pbuf = buf; while(*pbuf && isspace(*pbuf)) //将pbuf指向第一个非空字符 pbuf++; if(!*pbuf || *pbuf == '#') //如果改行是空数据或者是注释(以#开头为注释) continue; if(*pbuf == '['){ /* get a group name(组名的格式为"[组名]")*/ pbuf++; pbuf1 = strchr(pbuf, ']'); if(!pbuf1){ fprintf(stderr, "error: configure file: configure group name\n"); exit(1); } //根据group的名字找到其在全局变量configure_groups中的index group_idx = -1; for(i = 0; configure_groups[i].name; i++) if(strncmp(configure_groups[i].name, pbuf, pbuf1-pbuf) == 0){ group_idx = i; break; } if(group_idx < 0){ fprintf(stderr, "error: invalid configure group name\n"); exit(1); /* 我认为这儿没有必要退出。此处完全可以忽略这个错误, * 并且在后面也忽略这个组的配置即可。 * 因为这儿退出只会带来一个坏处,那就是扩展性。 * 以后再添加新的组的时候,老版本的程序就无法使用 * 新版本的配置文件了。或者,添加了一个可选扩展, * 该扩展新添加一个组等等。所以,此处应该给一个警告, * 而不是退出。*/ } continue; } //pbuf1指向第一个非空字符与=之间的字符 pbuf1 = strchr(pbuf, '='); if(!pbuf1){ fprintf(stderr, "error: configure file: configure entry name\n"); exit(1); // 和前面一样,这儿也应该是一个警告而不应该是提示出错并退出。 } /* * 这儿避免的是那样一种情况,即从文件头到第一个配置项(即类似与“配置名=配置值” * 的一行字符串)并没有任何分组。也就是防止出现下面的“配置1”和“配置2” * #文件头 * 配置1=123 配置2=123 * [组名] * ... * #文件尾 */ if(group_idx < 0){ fprintf(stderr, "error: configure file: no group name at beginning\n"); exit(1); } //找到该组中的配置项,并将其保存到对应的全局变量里面去 for(tmpconfig = configure_groups[group_idx].configure; tmpconfig->name; tmpconfig++) { if(strncmp(tmpconfig->name, pbuf, pbuf1-pbuf) == 0) read_configure(tmpconfig, ++pbuf1); } } fclose(fp); } /* 如果配置文件中没有设置打开/关闭输入法的热键,那么设置CTRL-SPACE为默认热键 */ if (!Trigger_Keys) { iTriggerKeyCount = 0; Trigger_Keys = (XIMTriggerKey *) malloc (sizeof (XIMTriggerKey) * (iTriggerKeyCount + 2)); Trigger_Keys[0].keysym = XK_space; Trigger_Keys[0].modifier = ControlMask; Trigger_Keys[0].modifier_mask = ControlMask; Trigger_Keys[1].keysym = 0; Trigger_Keys[1].modifier = 0; Trigger_Keys[1].modifier_mask = 0; } }
EAP_FUNC_EXPORT eap_status_e eapol_am_wlan_authentication_symbian_c::configure() { EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eapol_am_wlan_authentication_symbian_c::configure(): %s, this = 0x%08x => 0x%08x\n"), (m_is_client == true) ? "client": "server", this, dynamic_cast<abs_eap_base_timer_c *>(this))); EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eapol_am_wlan_authentication_symbian_c::configure()"); TInt error(KErrNone); eap_status_e status(eap_status_process_general_error); // Open the database session error = m_session.Connect(); if (error != KErrNone) { eap_status_e status(m_am_tools->convert_am_error_to_eapol_error(error)); EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: RDbs::Connect() failed %d=%s.\n"), status, eap_status_string_c::get_status_string(status))); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Database session initialized...\n"))); // Initialize database TRAP(error, InitDatabaseL()); if (error != KErrNone) { eap_status_e status(m_am_tools->convert_am_error_to_eapol_error(error)); EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: InitDatabaseL failed %d=%s.\n"), status, eap_status_string_c::get_status_string(status))); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Database initialized...\n"))); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - status = EapConfigToolsSymbian::EapReadDefaultConfigFileSymbian( m_am_tools, &m_fileconfig); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - #if defined(USE_EAP_FILE_TRACE) { eap_variable_data_c trace_output_file(m_am_tools); status = read_configure( cf_str_EAP_TRACE_output_file_name.get_field(), &trace_output_file); if (status == eap_status_ok && trace_output_file.get_is_valid_data() == true) { status = m_am_tools->set_trace_file_name(&trace_output_file); if (status == eap_status_ok) { // OK, set the default trace mask. m_am_tools->set_trace_mask( eap_am_tools_c::eap_trace_mask_debug | eap_am_tools_c::eap_trace_mask_always | eap_am_tools_c::eap_trace_mask_error | eap_am_tools_c::eap_trace_mask_message_data); } } } #endif //#if defined(USE_EAP_FILE_TRACE) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - { eap_variable_data_c EAP_TRACE_enable_timer_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_timer_traces.get_field(), &EAP_TRACE_enable_timer_traces); if (status == eap_status_ok && EAP_TRACE_enable_timer_traces.get_is_valid_data() == true) { u32_t *enable_timer_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_timer_traces.get_data(sizeof(u32_t))); if (enable_timer_traces != 0 && *enable_timer_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | TRACE_FLAGS_TIMER ); } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - { eap_variable_data_c EAP_TRACE_enable_timer_queue_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_timer_queue_traces.get_field(), &EAP_TRACE_enable_timer_queue_traces); if (status == eap_status_ok && EAP_TRACE_enable_timer_queue_traces.get_is_valid_data() == true) { u32_t *enable_timer_queue_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_timer_queue_traces.get_data(sizeof(u32_t))); if (enable_timer_queue_traces != 0 && *enable_timer_queue_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | TRACE_FLAGS_TIMER_QUEUE ); } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - { eap_variable_data_c EAP_TRACE_enable_function_traces(m_am_tools); status = read_configure( cf_str_EAP_TRACE_enable_function_traces.get_field(), &EAP_TRACE_enable_function_traces); if (status == eap_status_ok && EAP_TRACE_enable_function_traces.get_is_valid_data() == true) { u32_t *enable_function_traces = reinterpret_cast<u32_t *>( EAP_TRACE_enable_function_traces.get_data(sizeof(u32_t))); if (enable_function_traces != 0 && *enable_function_traces != 0) { m_am_tools->set_trace_mask( m_am_tools->get_trace_mask() | eap_am_tools_c::eap_trace_mask_functions ); } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Created timer...\n"))); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); }