45static void modedata_free_cb (gpointer self);
48static void modedata_flush_settings(
modedata_t *self);
50static gint modedata_sort_cb (gconstpointer a, gconstpointer b);
51static modedata_t *modedata_load (
const gchar *filename);
69modedata_free_cb(gpointer self)
101 g_free(self->connman_tethering);
103 modedata_flush_settings(self);
122 if( !(self = calloc(1,
sizeof *self)) )
147 self->connman_tethering = g_strdup(that->connman_tethering);
177 modedata_flush_settings(self);
212modedata_sort_cb(gconstpointer a, gconstpointer b)
214 LOG_REGISTER_CONTEXT;
229modedata_load(
const gchar *filename)
231 LOG_REGISTER_CONTEXT;
234 bool success =
false;
235 GKeyFile *settingsfile = g_key_file_new();
237 if( !g_key_file_load_from_file(settingsfile, filename, G_KEY_FILE_NONE, NULL) ) {
238 log_err(
"%s: can't read mode configuration file", filename);
242 if( !(self = calloc(1,
sizeof *self)) )
246 self->
mode_name = g_key_file_get_string(settingsfile, MODE_ENTRY, MODE_NAME_KEY, NULL);
247 self->
mode_module = g_key_file_get_string(settingsfile, MODE_ENTRY, MODE_MODULE_KEY, NULL);
249 log_debug(
"Dynamic mode name = %s\n", self->
mode_name);
250 log_debug(
"Dynamic mode module = %s\n", self->
mode_module);
252 self->
appsync = g_key_file_get_integer(settingsfile, MODE_ENTRY, MODE_NEEDS_APPSYNC_KEY, NULL);
253 self->
mass_storage = g_key_file_get_integer(settingsfile, MODE_ENTRY, MODE_MASS_STORAGE_KEY, NULL);
254 self->
network = g_key_file_get_integer(settingsfile, MODE_ENTRY, MODE_NETWORK_KEY, NULL);
255 self->
network_interface = g_key_file_get_string(settingsfile, MODE_ENTRY, MODE_NETWORK_INTERFACE_KEY, NULL);
258 self->
sysfs_path = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_PATH, NULL);
259 self->
sysfs_value = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_VALUE, NULL);
260 self->
sysfs_reset_value = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_RESET_VALUE, NULL);
262 self->
android_extra_sysfs_path = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_PATH, NULL);
263 self->
android_extra_sysfs_path2 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_PATH2, NULL);
264 self->
android_extra_sysfs_path3 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_PATH3, NULL);
265 self->
android_extra_sysfs_path4 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_PATH4, NULL);
266 self->
android_extra_sysfs_value = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_VALUE, NULL);
267 self->
android_extra_sysfs_value2 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_VALUE2, NULL);
268 self->
android_extra_sysfs_value3 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_VALUE3, NULL);
269 self->
android_extra_sysfs_value4 = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_ANDROID_EXTRA_SYSFS_VALUE4, NULL);
271 self->
idProduct = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_IDPRODUCT, NULL);
272 self->
idVendorOverride = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_IDVENDOROVERRIDE, NULL);
273 self->
nat = g_key_file_get_integer(settingsfile, MODE_OPTIONS_ENTRY, MODE_HAS_NAT, NULL);
274 self->
dhcp_server = g_key_file_get_integer(settingsfile, MODE_OPTIONS_ENTRY, MODE_HAS_DHCP_SERVER, NULL);
276 self->connman_tethering = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_CONNMAN_TETHERING, NULL);
285 log_err(
"%s: mode_name or mode_module not defined", filename);
305 log_debug(
"%s: network_interface not defined", filename);
320 log_err(
"%s: sysfs_value not fully defined", filename);
324 log_debug(
"%s: successfully loaded", filename);
328 g_key_file_free(settingsfile);
347 LOG_REGISTER_CONTEXT;
349 g_list_free_full(modelist, modedata_free_cb);
362 LOG_REGISTER_CONTEXT;
365 const char *dirpath = diag ? DIAG_DIR_PATH : MODE_DIR_PATH;
366 gchar *pattern = g_strdup_printf(
"%s/*.ini", dirpath);
369 if( glob(pattern, 0, 0, &gb) != 0 )
370 log_debug(
"no mode configuration ini-files found");
372 for(
size_t i = 0; i < gb.gl_pathc; ++i ) {
373 const char *filepath = gb.gl_pathv[i];
374 log_debug(
"Read file %s\n", filepath);
375 modedata_t *list_item = modedata_load(filepath);
377 modelist = g_list_append(modelist, list_item);
383 return g_list_sort(modelist, modedata_sort_cb);
gchar * android_extra_sysfs_value3
gchar * cached_nat_interface
gchar * sysfs_reset_value
gchar * android_extra_sysfs_path3
gchar * android_extra_sysfs_path
gchar * android_extra_sysfs_path4
gchar * android_extra_sysfs_value4
gchar * network_interface
gchar * android_extra_sysfs_value2
gchar * android_extra_sysfs_value
gchar * android_extra_sysfs_path2
char * config_get_network_fallback(const char *config)
char * config_get_network_setting(const char *config)
void modelist_free(GList *modelist)
void modedata_free(modedata_t *self)
modedata_t * modedata_copy(const modedata_t *that)
GList * modelist_load(bool diag)