| OLD | NEW |
| 1 /* | 1 /* |
| 2 * | 2 * |
| 3 * Connection Manager | 3 * Connection Manager |
| 4 * | 4 * |
| 5 * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. | 5 * Copyright (C) 2007-2009 Intel Corporation. All rights reserved. |
| 6 * | 6 * |
| 7 * This program is free software; you can redistribute it and/or modify | 7 * This program is free software; you can redistribute it and/or modify |
| 8 * it under the terms of the GNU General Public License version 2 as | 8 * it under the terms of the GNU General Public License version 2 as |
| 9 * published by the Free Software Foundation. | 9 * published by the Free Software Foundation. |
| 10 * | 10 * |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 char *meid; | 73 char *meid; |
| 74 char *imei; | 74 char *imei; |
| 75 char *imsi; | 75 char *imsi; |
| 76 char *mdn; | 76 char *mdn; |
| 77 char *min; | 77 char *min; |
| 78 char *model_id; | 78 char *model_id; |
| 79 char *manufacturer; | 79 char *manufacturer; |
| 80 char *firmware_revision; | 80 char *firmware_revision; |
| 81 char *hardware_revision; | 81 char *hardware_revision; |
| 82 guint prl_version; | 82 guint prl_version; |
| 83 GTimeVal modem_update_time; | |
| 84 } cellular; | 83 } cellular; |
| 85 | 84 |
| 86 struct connman_device_driver *driver; | 85 struct connman_device_driver *driver; |
| 87 void *driver_data; | 86 void *driver_data; |
| 88 | 87 |
| 89 struct connman_network *network; /* current connected network */ | 88 struct connman_network *network; /* current connected network */ |
| 90 GHashTable *networks; /* associated networks */ | 89 GHashTable *networks; /* associated networks */ |
| 91 | 90 |
| 92 DBusMessage *pending; | 91 DBusMessage *pending; |
| 93 guint timeout; | 92 guint timeout; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 return CONNMAN_SERVICE_TYPE_WIMAX; | 215 return CONNMAN_SERVICE_TYPE_WIMAX; |
| 217 case CONNMAN_DEVICE_TYPE_BLUETOOTH: | 216 case CONNMAN_DEVICE_TYPE_BLUETOOTH: |
| 218 return CONNMAN_SERVICE_TYPE_BLUETOOTH; | 217 return CONNMAN_SERVICE_TYPE_BLUETOOTH; |
| 219 case CONNMAN_DEVICE_TYPE_CELLULAR: | 218 case CONNMAN_DEVICE_TYPE_CELLULAR: |
| 220 return CONNMAN_SERVICE_TYPE_CELLULAR; | 219 return CONNMAN_SERVICE_TYPE_CELLULAR; |
| 221 } | 220 } |
| 222 | 221 |
| 223 return CONNMAN_SERVICE_TYPE_UNKNOWN; | 222 return CONNMAN_SERVICE_TYPE_UNKNOWN; |
| 224 } | 223 } |
| 225 | 224 |
| 226 void __connman_device_set_modem_update_time(struct connman_device *device) | |
| 227 { | |
| 228 g_get_current_time(&device->cellular.modem_update_time); | |
| 229 } | |
| 230 | |
| 231 struct connman_ipconfig *connman_device_add_ipconfig( | 225 struct connman_ipconfig *connman_device_add_ipconfig( |
| 232 struct connman_device *device, enum connman_ipconfig_type type) | 226 struct connman_device *device, enum connman_ipconfig_type type) |
| 233 { | 227 { |
| 234 struct connman_ipconfig *ipconfig; | 228 struct connman_ipconfig *ipconfig; |
| 235 gchar name[32]; | 229 gchar name[32]; |
| 236 int ix; | 230 int ix; |
| 237 | 231 |
| 238 /* XXX not unique if config's deleted */ | 232 /* XXX not unique if config's deleted */ |
| 239 ix = ffs(~(device->configmask)); | 233 ix = ffs(~(device->configmask)); |
| 240 if (ix == 0) { | 234 if (ix == 0) { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &str); | 407 dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &str); |
| 414 } | 408 } |
| 415 | 409 |
| 416 static void append_ipconfig(DBusMessageIter *dict, void *arg) | 410 static void append_ipconfig(DBusMessageIter *dict, void *arg) |
| 417 { | 411 { |
| 418 struct connman_device *device = arg; | 412 struct connman_device *device = arg; |
| 419 | 413 |
| 420 __connman_ipconfig_foreach(device, append_ipconfig_path, dict); | 414 __connman_ipconfig_foreach(device, append_ipconfig_path, dict); |
| 421 } | 415 } |
| 422 | 416 |
| 423 /* | |
| 424 * Determine whether a GTimeVal represents a valid time. | |
| 425 * There actually are no invalid values, but we know that | |
| 426 * a time of [0, 0] should never occur in the context in which | |
| 427 * we are using GTimeVals. | |
| 428 */ | |
| 429 static connman_bool_t __is_valid_time(GTimeVal *timeval) | |
| 430 { | |
| 431 return timeval->tv_sec != 0 || timeval->tv_usec != 0; | |
| 432 } | |
| 433 | |
| 434 static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, | 417 static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, |
| 435 void *data) | 418 void *data) |
| 436 { | 419 { |
| 437 struct connman_device *device = data; | 420 struct connman_device *device = data; |
| 438 DBusMessage *reply; | 421 DBusMessage *reply; |
| 439 DBusMessageIter array, dict; | 422 DBusMessageIter array, dict; |
| 440 const char *str; | 423 const char *str; |
| 441 | 424 |
| 442 _DBG_DEVICE("conn %p", conn); | 425 _DBG_DEVICE("conn %p", conn); |
| 443 | 426 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 if (device->cellular.firmware_revision != NULL) | 519 if (device->cellular.firmware_revision != NULL) |
| 537 connman_dbus_dict_append_variant( | 520 connman_dbus_dict_append_variant( |
| 538 &dict, "Cellular.FirmwareRevision", | 521 &dict, "Cellular.FirmwareRevision", |
| 539 DBUS_TYPE_STRING, | 522 DBUS_TYPE_STRING, |
| 540 &device->cellular.firmware_revision); | 523 &device->cellular.firmware_revision); |
| 541 if (device->cellular.hardware_revision != NULL) | 524 if (device->cellular.hardware_revision != NULL) |
| 542 connman_dbus_dict_append_variant( | 525 connman_dbus_dict_append_variant( |
| 543 &dict, "Cellular.HardwareRevision", | 526 &dict, "Cellular.HardwareRevision", |
| 544 DBUS_TYPE_STRING, | 527 DBUS_TYPE_STRING, |
| 545 &device->cellular.hardware_revision); | 528 &device->cellular.hardware_revision); |
| 546 if (__is_valid_time(&device->cellular.modem_update_time)) { | |
| 547 str = g_time_val_to_iso8601(&device->cellular.modem_upda
te_time); | |
| 548 if (str != NULL) { | |
| 549 connman_dbus_dict_append_variant( | |
| 550 &dict, | |
| 551 "Cellular.LastDeviceUpdate", | |
| 552 DBUS_TYPE_STRING, | |
| 553 &str); | |
| 554 } | |
| 555 } | |
| 556 connman_dbus_dict_append_variant( | 529 connman_dbus_dict_append_variant( |
| 557 &dict, "Cellular.PRLVersion", | 530 &dict, "Cellular.PRLVersion", |
| 558 DBUS_TYPE_UINT16, | 531 DBUS_TYPE_UINT16, |
| 559 &device->cellular.prl_version); | 532 &device->cellular.prl_version); |
| 560 } | 533 } |
| 561 | 534 |
| 562 switch (device->mode) { | 535 switch (device->mode) { |
| 563 case CONNMAN_DEVICE_MODE_UNKNOWN: | 536 case CONNMAN_DEVICE_MODE_UNKNOWN: |
| 564 case CONNMAN_DEVICE_MODE_TRANSPORT_IP: | 537 case CONNMAN_DEVICE_MODE_TRANSPORT_IP: |
| 565 break; | 538 break; |
| (...skipping 1719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2285 g_clear_error(&error); | 2258 g_clear_error(&error); |
| 2286 break; | 2259 break; |
| 2287 } | 2260 } |
| 2288 | 2261 |
| 2289 configs = g_key_file_get_string_list(keyfile, identifier, "IPConfigs", | 2262 configs = g_key_file_get_string_list(keyfile, identifier, "IPConfigs", |
| 2290 &nconfigs, &error); | 2263 &nconfigs, &error); |
| 2291 if (error == NULL && configs != NULL) | 2264 if (error == NULL && configs != NULL) |
| 2292 device_load_ipconfigs(device, nconfigs, configs); | 2265 device_load_ipconfigs(device, nconfigs, configs); |
| 2293 g_strfreev(configs); | 2266 g_strfreev(configs); |
| 2294 g_clear_error(&error); | 2267 g_clear_error(&error); |
| 2295 | |
| 2296 if (device->type == CONNMAN_DEVICE_TYPE_CELLULAR) { | |
| 2297 gchar *str; | |
| 2298 str = g_key_file_get_string(keyfile, | |
| 2299 identifier, | |
| 2300 "Cellular.LastDeviceUpdate", NULL); | |
| 2301 if (str != NULL) { | |
| 2302 g_time_val_from_iso8601( | |
| 2303 str, | |
| 2304 &device->cellular.modem_update_time); | |
| 2305 g_free(str); | |
| 2306 } | |
| 2307 } | |
| 2308 done: | 2268 done: |
| 2309 g_free(identifier); | 2269 g_free(identifier); |
| 2310 | 2270 |
| 2311 __connman_storage_close(ident, keyfile, FALSE); | 2271 __connman_storage_close(ident, keyfile, FALSE); |
| 2312 | 2272 |
| 2313 return 0; | 2273 return 0; |
| 2314 } | 2274 } |
| 2315 | 2275 |
| 2316 static int device_save(struct connman_device *device) | 2276 static int device_save(struct connman_device *device) |
| 2317 { | 2277 { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2356 g_key_file_set_integer(keyfile, identifier, | 2316 g_key_file_set_integer(keyfile, identifier, |
| 2357 "BgscanSignalThreshold", device->signal_threshold); | 2317 "BgscanSignalThreshold", device->signal_threshold); |
| 2358 break; | 2318 break; |
| 2359 } | 2319 } |
| 2360 | 2320 |
| 2361 __connman_ipconfig_get_keys(device, 32, paths, &npaths); | 2321 __connman_ipconfig_get_keys(device, 32, paths, &npaths); |
| 2362 g_key_file_set_string_list(keyfile, identifier, "IPConfigs", | 2322 g_key_file_set_string_list(keyfile, identifier, "IPConfigs", |
| 2363 paths, npaths); | 2323 paths, npaths); |
| 2364 for (i = 0; i < npaths; i++) | 2324 for (i = 0; i < npaths; i++) |
| 2365 g_free((gpointer)paths[i]); | 2325 g_free((gpointer)paths[i]); |
| 2366 | |
| 2367 if (device->type == CONNMAN_DEVICE_TYPE_CELLULAR) { | |
| 2368 if (__is_valid_time(&device->cellular.modem_update_time)) { | |
| 2369 gchar *str; | |
| 2370 str = g_time_val_to_iso8601(&device->cellular.modem_upda
te_time); | |
| 2371 if (str != NULL) { | |
| 2372 g_key_file_set_string( | |
| 2373 keyfile, | |
| 2374 identifier, | |
| 2375 "Cellular.LastDeviceUpdate", | |
| 2376 str); | |
| 2377 } | |
| 2378 } | |
| 2379 } | |
| 2380 done: | 2326 done: |
| 2381 g_free(identifier); | 2327 g_free(identifier); |
| 2382 | 2328 |
| 2383 __connman_storage_close(ident, keyfile, TRUE); | 2329 __connman_storage_close(ident, keyfile, TRUE); |
| 2384 | 2330 |
| 2385 return 0; | 2331 return 0; |
| 2386 } | 2332 } |
| 2387 | 2333 |
| 2388 static struct connman_storage device_storage = { | 2334 static struct connman_storage device_storage = { |
| 2389 .name = "device", | 2335 .name = "device", |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2400 connman_error("%s: failed to register storage", __func__); | 2346 connman_error("%s: failed to register storage", __func__); |
| 2401 return connman_driver_register(&device_driver); | 2347 return connman_driver_register(&device_driver); |
| 2402 } | 2348 } |
| 2403 | 2349 |
| 2404 void __connman_device_cleanup(void) | 2350 void __connman_device_cleanup(void) |
| 2405 { | 2351 { |
| 2406 connman_driver_unregister(&device_driver); | 2352 connman_driver_unregister(&device_driver); |
| 2407 connman_storage_unregister(&device_storage); | 2353 connman_storage_unregister(&device_storage); |
| 2408 dbus_connection_unref(connection); | 2354 dbus_connection_unref(connection); |
| 2409 } | 2355 } |
| OLD | NEW |