diff --git a/Makefile.am b/Makefile.am
index 3a7fe91..f956255 100644
--- a/Makefile.am
+++ b/Makefile.am
src/profile.h src/profile.c \
src/device.h src/device.c src/attio.h \
src/dbus-common.c src/dbus-common.h \
- src/eir.h src/eir.c src/mgmt.c src/mgmt.h \
+ src/eir.h src/eir.c \
src/shared/util.h src/shared/util.c \
src/shared/mgmt.h src/shared/mgmt.c
src_bluetoothd_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ @DBUS_LIBS@ \
diff --git a/src/adapter.c b/src/adapter.c
index 6a37021..236fe2d 100644
--- a/src/adapter.c
+++ b/src/adapter.c
#include "attrib/gatt.h"
#include "attrib-server.h"
#include "eir.h"
-#include "mgmt.h"
#define ADAPTER_INTERFACE "org.bluez.Adapter1"
diff --git a/src/main.c b/src/main.c
index 8b6ad25..57f1fa9 100644
--- a/src/main.c
+++ b/src/main.c
#include "dbus-common.h"
#include "agent.h"
#include "profile.h"
-#include "mgmt.h"
#include "systemd.h"
#define BLUEZ_NAME "org.bluez"
GKeyFile *config;
guint signal, watchdog;
const char *watchdog_usec;
- int mgmt_err;
init_defaults();
/* no need to keep parsed option in memory */
free_options();
- mgmt_err = mgmt_setup();
- if (mgmt_err < 0) {
- error("mgmt setup failed: %s", strerror(-mgmt_err));
- exit(1);
- }
-
rfkill_init();
DBG("Entering main loop");
if (config)
g_key_file_free(config);
- mgmt_cleanup();
-
disconnect_dbus();
info("Exit");
diff --git a/src/mgmt.c b/src/mgmt.c
deleted file mode 100644
index 86a4e92..0000000
--- a/src/mgmt.c
+++ /dev/null
-/*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2010 Nokia Corporation
- * Copyright (C) 2010 Marcel Holtmann <marcel@holtmann.org>
- * Copyright (C) 2011-2012 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-
-#include <glib.h>
-
-#include <bluetooth/bluetooth.h>
-#include <bluetooth/hci.h>
-#include <bluetooth/sdp.h>
-#include <bluetooth/sdp_lib.h>
-#include <bluetooth/mgmt.h>
-
-#include "log.h"
-#include "adapter.h"
-#include "device.h"
-#include "eir.h"
-#include "storage.h"
-#include "mgmt.h"
-
-#define MGMT_BUF_SIZE 1024
-
-static int mgmt_sock = -1;
-static guint mgmt_watch = 0;
-
-static void mgmt_cmd_complete(uint16_t index, void *buf, size_t len)
-{
- struct mgmt_ev_cmd_complete *ev = buf;
- uint16_t opcode;
-
- if (len < sizeof(*ev)) {
- error("Too small management command complete event packet");
- return;
- }
-
- opcode = bt_get_le16(&ev->opcode);
-
- len -= sizeof(*ev);
-
- DBG("%s (0x%04x) status 0x%02x len %zu", mgmt_opstr(opcode), opcode,
- ev->status, len);
-}
-
-static void mgmt_cmd_status(uint16_t index, void *buf, size_t len)
-{
- struct mgmt_ev_cmd_status *ev = buf;
- uint16_t opcode;
-
- if (len < sizeof(*ev)) {
- error("Too small management command status event packet");
- return;
- }
-
- opcode = bt_get_le16(&ev->opcode);
-
- DBG("hci%u: %s (0x%04x) status: %s (0x%02x)", index,
- mgmt_opstr(opcode), opcode, mgmt_errstr(ev->status),
- ev->status);
-}
-
-static gboolean mgmt_event(GIOChannel *channel, GIOCondition cond,
- gpointer user_data)
-{
- char buf[MGMT_BUF_SIZE];
- struct mgmt_hdr *hdr = (void *) buf;
- ssize_t ret;
- uint16_t len, opcode, index;
-
- if (cond & G_IO_NVAL)
- return FALSE;
-
- if (cond & (G_IO_ERR | G_IO_HUP)) {
- error("Error on management socket");
- return FALSE;
- }
-
- ret = read(mgmt_sock, buf, sizeof(buf));
- if (ret < 0) {
- error("Unable to read from management socket: %s (%d)",
- strerror(errno), errno);
- return TRUE;
- }
-
- if (ret < MGMT_HDR_SIZE) {
- error("Too small Management packet");
- return TRUE;
- }
-
- opcode = bt_get_le16(&hdr->opcode);
- len = bt_get_le16(&hdr->len);
- index = bt_get_le16(&hdr->index);
-
- if (ret != MGMT_HDR_SIZE + len) {
- error("Packet length mismatch. ret %zd len %u", ret, len);
- return TRUE;
- }
-
- switch (opcode) {
- case MGMT_EV_CMD_COMPLETE:
- mgmt_cmd_complete(index, buf + MGMT_HDR_SIZE, len);
- break;
- case MGMT_EV_CMD_STATUS:
- mgmt_cmd_status(index, buf + MGMT_HDR_SIZE, len);
- break;
- case MGMT_EV_CONTROLLER_ERROR:
- DBG("controller_error event");
- break;
- case MGMT_EV_INDEX_ADDED:
- DBG("index_added event");
- break;
- case MGMT_EV_INDEX_REMOVED:
- DBG("index_removed event");
- break;
- case MGMT_EV_NEW_SETTINGS:
- DBG("new_settings event");
- break;
- case MGMT_EV_CLASS_OF_DEV_CHANGED:
- DBG("class_of_dev_changed event");
- break;
- case MGMT_EV_LOCAL_NAME_CHANGED:
- DBG("local_name_changed event");
- break;
- case MGMT_EV_NEW_LINK_KEY:
- DBG("new_link_key event");
- break;
- case MGMT_EV_DEVICE_CONNECTED:
- DBG("device_connected event");
- break;
- case MGMT_EV_DEVICE_DISCONNECTED:
- DBG("device_disconnected event");
- break;
- case MGMT_EV_CONNECT_FAILED:
- DBG("connect_failed event");
- break;
- case MGMT_EV_PIN_CODE_REQUEST:
- DBG("pin_code_request event");
- break;
- case MGMT_EV_USER_CONFIRM_REQUEST:
- DBG("user_confirm_request event");
- break;
- case MGMT_EV_AUTH_FAILED:
- DBG("auth_failed event");
- break;
- case MGMT_EV_DEVICE_FOUND:
- DBG("device_found event");
- break;
- case MGMT_EV_DISCOVERING:
- DBG("discovering event");
- break;
- case MGMT_EV_DEVICE_BLOCKED:
- DBG("device_blocked event");
- break;
- case MGMT_EV_DEVICE_UNBLOCKED:
- DBG("device_unblocked event");
- break;
- case MGMT_EV_DEVICE_UNPAIRED:
- DBG("device_unpaired event");
- break;
- case MGMT_EV_USER_PASSKEY_REQUEST:
- DBG("passkey_request event");
- break;
- case MGMT_EV_PASSKEY_NOTIFY:
- DBG("passkey_notify event");
- break;
- case MGMT_EV_NEW_LONG_TERM_KEY:
- DBG("new_long_term_key event");
- break;
- default:
- error("Unknown Management opcode %u (index %u)", opcode, index);
- break;
- }
-
- return TRUE;
-}
-
-int mgmt_setup(void)
-{
- struct mgmt_hdr hdr;
- struct sockaddr_hci addr;
- GIOChannel *io;
- GIOCondition condition;
- int dd, err;
-
- dd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
- if (dd < 0)
- return -errno;
-
- memset(&addr, 0, sizeof(addr));
- addr.hci_family = AF_BLUETOOTH;
- addr.hci_dev = HCI_DEV_NONE;
- addr.hci_channel = HCI_CHANNEL_CONTROL;
-
- if (bind(dd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
- err = -errno;
- goto fail;
- }
-
- memset(&hdr, 0, sizeof(hdr));
- hdr.opcode = htobs(MGMT_OP_READ_INDEX_LIST);
- hdr.index = htobs(MGMT_INDEX_NONE);
- if (write(dd, &hdr, sizeof(hdr)) < 0) {
- err = -errno;
- goto fail;
- }
-
- io = g_io_channel_unix_new(dd);
- condition = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
- mgmt_watch = g_io_add_watch(io, condition, mgmt_event, NULL);
- g_io_channel_unref(io);
-
- mgmt_sock = dd;
-
- return 0;
-
-fail:
- close(dd);
- return err;
-}
-
-void mgmt_cleanup(void)
-{
- if (mgmt_sock >= 0) {
- close(mgmt_sock);
- mgmt_sock = -1;
- }
-
- if (mgmt_watch > 0) {
- g_source_remove(mgmt_watch);
- mgmt_watch = 0;
- }
-}
diff --git a/src/mgmt.h b/src/mgmt.h
deleted file mode 100644
index deaa617..0000000
--- a/src/mgmt.h
+++ /dev/null
-/*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2010 Nokia Corporation
- * Copyright (C) 2010 Marcel Holtmann <marcel@holtmann.org>
- * Copyright (C) 2011-2012 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-int mgmt_setup(void);
-void mgmt_cleanup(void);