static DBusMessage *unregister_agent(DBusConnection *conn, DBusMessage *msg, void *user_data) { struct agent *agent; const char *sender, *path; sender = dbus_message_get_sender(msg); agent = g_hash_table_lookup(agent_list, sender); if (!agent) return btd_error_does_not_exist(msg); DBG("agent %s", agent->owner); if (dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID) == FALSE) return btd_error_invalid_args(msg); if (g_str_equal(path, agent->path) == FALSE) return btd_error_does_not_exist(msg); agent_disconnect(conn, agent); return dbus_message_new_method_return(msg); }
void gateway_unregister(struct audio_device *dev) { if (dev->gateway->agent) agent_disconnect(dev, dev->gateway->agent); g_dbus_unregister_interface(btd_get_dbus_connection(), dev->path, AUDIO_GATEWAY_INTERFACE); }
/** * SIGALRM handler */ static void sigalrm(int dummy) { // This is not incredibly safe, because signal may interrupt // processing, and is not a technique for a production agent, // but suffices for this quick 'n dirty sample if (alarms > 1) { agent_send_data(CONTEXT_ID); alarm(3); } else if (alarms == 1) { agent_request_association_release(CONTEXT_ID); alarm(3); } else { agent_disconnect(CONTEXT_ID); } --alarms; }