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 |