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