Hi Zhenhua,
+ if (g_str_equal(property, "Online") == TRUE) {
+ const char *path = dbus_message_get_path(msg);
+ struct ofono_modem *modem;
+ struct ofono_atom *gprs;
+ gboolean online;
+
+ if (!dbus_message_iter_next(&iter))
+ return FALSE;
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
+ return FALSE;
+
+ dbus_message_iter_recurse(&iter, &var);
+
+ dbus_message_iter_get_basic(&var, &online);
+
+ if (online == FALSE) {
+ bluetooth_unregister_server(server);
+ server = NULL;
+ goto done;
+ }
+
+ /* Create DUN server */
+ modem = ofono_modem_get_modem_by_path(path);
+ gprs = __ofono_modem_find_atom(modem,
+ OFONO_ATOM_TYPE_GPRS);
+ /* Make sure the modem has GPRS atom */
+ if (!gprs)
+ goto done;
+
+ server = bluetooth_register_server(DUN_GW,
+ "Dial-Up Networking", DUN_GW_CHANNEL,
+ dun_gw_connect_cb, modem);
+ }
+
+done:
+ return TRUE;
+}
Please don't do it this way. Instead add a new modem_state_watch
function to modem.c for accomplishing this.
Regards,
-Denis