|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
From 8cc8002094fe880d374a727aa0be389ca68b0342 Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
From: Jeffrey C. Ollie <jeff@ocjtech.us>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
Date: Mon, 25 Feb 2008 09:23:28 -0600
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
bf4f472 |
Subject: [PATCH 05/15] Add chan_mobile from asterisk-addons.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
---
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
build_tools/menuselect-deps.in | 1 +
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
channels/Makefile | 2 +
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
channels/chan_mobile.c | 2118 ++++++++++++++++++++++++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
configs/mobile.conf.sample | 60 ++
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
configure.ac | 4 +
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
doc/chan_mobile.txt | 240 +++++
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
makeopts.in | 3 +
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
7 files changed, 2428 insertions(+), 0 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
create mode 100644 channels/chan_mobile.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
create mode 100644 configs/mobile.conf.sample
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
create mode 100644 doc/chan_mobile.txt
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
7131142 |
index 1cd1870..45faa9e 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- a/build_tools/menuselect-deps.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/build_tools/menuselect-deps.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
@@ -1,5 +1,6 @@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
ASOUND=@PBX_ALSA@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
CRYPTO=@PBX_CRYPTO@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+BLUETOOTH=@PBX_BLUETOOTH@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
CURL=@PBX_CURL@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
7131142 |
DAHDI=@PBX_DAHDI@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
FREETDS=@PBX_FREETDS@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/channels/Makefile b/channels/Makefile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e12c6ae |
index 34bd8e0..d8e691a 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- a/channels/Makefile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/channels/Makefile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e12c6ae |
@@ -101,3 +101,5 @@ misdn/isdn_lib.o: ASTCFLAGS+=-Wno-strict-aliasing
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
$(if $(filter chan_misdn,$(EMBEDDED_MODS)),modules.link,chan_misdn.so): misdn_config.o misdn/isdn_lib.o misdn/isdn_msg_parser.o
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
$(if $(filter chan_oss,$(EMBEDDED_MODS)),modules.link,chan_oss.so): console_video.o vgrabbers.o console_board.o
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e12c6ae |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e12c6ae |
+chan_mobile.so: LIBS+=$(BLUETOOTH_LIB)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/channels/chan_mobile.c b/channels/chan_mobile.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
new file mode 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
index 0000000..1312ea9
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- /dev/null
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/channels/chan_mobile.c
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
@@ -0,0 +1,2118 @@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * Asterisk -- An open source telephony toolkit.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * Copyright (C) 1999 - 2006, Digium, Inc.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * Mark Spencer <markster@digium.com>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * See http://www.asterisk.org for more information about
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * the Asterisk project. Please do not directly contact
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * any of the maintainers of this project for assistance;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * the project provides a web site, mailing lists and IRC
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * channels for your use.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * This program is free software, distributed under the terms of
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * the GNU General Public License Version 2. See the LICENSE file
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * at the top of the source tree.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*! \file
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * \brief Bluetooth Mobile Device channel driver
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * \author Dave Bowerman <david.bowerman@gmail.com>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ * \ingroup channel_drivers
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*** MODULEINFO
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ <depend>bluetooth</depend>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ***/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <stdio.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <string.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <sys/socket.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <sys/time.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <errno.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <unistd.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <stdlib.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <arpa/inet.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <fcntl.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <sys/ioctl.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <signal.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/bluetooth.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/hci.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/hci_lib.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/sdp.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/sdp_lib.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/rfcomm.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/sco.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <bluetooth/l2cap.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/lock.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/channel.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/config.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/logger.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/module.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/pbx.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/options.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/utils.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/linkedlists.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/cli.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/devicestate.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/causes.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/dsp.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/app.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#include <asterisk/manager.h>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#define MBL_CONFIG "mobile.conf"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#define DEVICE_FRAME_SIZE 48
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#define DEVICE_FRAME_FORMAT AST_FORMAT_SLINEAR
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+#define CHANNEL_FRAME_SIZE 320
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int prefformat = DEVICE_FRAME_FORMAT;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int discovery_interval = 60; /* The device discovery interval, default 60 seconds. */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static pthread_t discovery_thread = AST_PTHREADT_NULL; /* The discovery thread */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static sdp_session_t *sdp_session;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+enum mbl_type {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_TYPE_PHONE,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_TYPE_HEADSET
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+enum mbl_state {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT = 0,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT1,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT2,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT3,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT4,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT5,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INIT6,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ MBL_STATE_INIT7,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_PREIDLE,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_IDLE,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_DIAL,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_DIAL1,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_OUTGOING,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_RING,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_RING2,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_RING3,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INCOMING,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_HANGUP,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_INSMS,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_OUTSMS,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_OUTSMS1,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ MBL_STATE_OUTSMS2
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+struct adapter_pvt {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int dev_id; /* device id */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int hci_socket; /* device descriptor */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char id[31]; /* the 'name' from mobile.conf */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bdaddr_t addr; /* adddress of adapter */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int inuse:1; /* are we in use ? */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int alignment_detection:1; /* do alignment detection on this adpater? */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int sco_socket;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_ENTRY(adapter_pvt) entry;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static AST_LIST_HEAD_STATIC(adapters, adapter_pvt);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+struct mbl_pvt {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_channel *owner; /* Channel we belong to, possibly NULL */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_frame fr; /* "null" frame */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ enum mbl_type type; /* Phone or Headset */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char id[31]; /* The id from mobile.conf */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int group; /* group number for group dialling */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bdaddr_t addr; /* address of device */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter; /* the adapter we use */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char context[AST_MAX_CONTEXT]; /* the context for incoming calls */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char connected; /* is it connected? */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int rfcomm_port; /* rfcomm port number */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int rfcomm_socket; /* rfcomm socket descriptor */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char rfcomm_buf[256];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char io_buf[CHANNEL_FRAME_SIZE + AST_FRIENDLY_OFFSET];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char io_save_buf[DEVICE_FRAME_SIZE];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int io_save_len;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int io_pipe[2];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int sco_socket; /* sco socket descriptor */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_t sco_listener_thread; /* inbound sco listener for this device */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ enum mbl_state state; /* monitor thread current state */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_t monitor_thread; /* monitor thread handle */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char dial_number[AST_MAX_EXTENSION]; /* number for the monitor thread to dial */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int dial_timeout;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_call_0[4]; /* dynamically built reponse strings */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_call_1[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_callsetup_0[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_callsetup_1[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_callsetup_2[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char ciev_callsetup_3[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int no_callsetup:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int has_sms:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int sent_answer:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int do_alignment_detection:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int alignment_detection_triggered:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ unsigned int do_hangup:1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ short alignment_samples[4];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int alignment_count;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char sms_txt[160];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_dsp *dsp;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_frame *dsp_fr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int dtmf_skip;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int skip_frames;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char hangup_count;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_ENTRY(mbl_pvt) entry;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static AST_LIST_HEAD_STATIC(devices, mbl_pvt);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/* CLI stuff */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_show_devices(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_search(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_rfcomm(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_cli_entry mbl_cli[] = {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ AST_CLI_DEFINE(handle_cli_mobile_show_devices, "Show Bluetooth Cell / Mobile devices"),
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ AST_CLI_DEFINE(handle_cli_mobile_search, "Search for Bluetooth Cell / Mobile devices"),
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ AST_CLI_DEFINE(handle_cli_mobile_rfcomm, "Send commands to the rfcomm port for debugging"),
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/* App stuff */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *app_mblstatus = "MobileStatus";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *mblstatus_synopsis = "MobileStatus(Device,Variable)";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *mblstatus_desc =
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+"MobileStatus(Device,Variable)\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+" Device - Id of mobile device from mobile.conf\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+" Variable - Variable to store status in will be 1-3.\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+" In order, Disconnected, Connected & Free, Connected & Busy.\n";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *app_mblsendsms = "MobileSendSMS";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *mblsendsms_synopsis = "MobileSendSMS(Device,Dest,Message)";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static char *mblsendsms_desc =
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+"MobileSendSms(Device,Dest,Message)\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+" Device - Id of device from mobile.conf\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+" Dest - destination\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+" Message - text of the message\n";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_channel *mbl_request(const char *type, int format, void *data, int *cause);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_call(struct ast_channel *ast, char *dest, int timeout);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_hangup(struct ast_channel *ast);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_answer(struct ast_channel *ast);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_digit_begin(struct ast_channel *ast, char digit);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_digit_end(struct ast_channel *ast, char digit, unsigned int duration);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_frame *mbl_read(struct ast_channel *ast);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_write(struct ast_channel *ast, struct ast_frame *frame);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_devicestate(void *data);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void do_alignment_detection(struct mbl_pvt *pvt, char *buf, int buflen);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_connect(bdaddr_t src, bdaddr_t dst, int remote_channel);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_write(struct mbl_pvt *pvt, char *buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_read(struct mbl_pvt *pvt, char *buf, char flush, int timeout);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_connect(bdaddr_t src, bdaddr_t dst);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_write(int s, char *buf, int len);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_read(int s, char *buf, int len);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void *do_sco_listen(void *data);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sdp_search(char *addr, int profile);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static const struct ast_channel_tech mbl_tech = {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .type = "Mobile",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .description = "Bluetooth Mobile Device Channel Driver",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .capabilities = AST_FORMAT_SLINEAR,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .requester = mbl_request,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .call = mbl_call,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .hangup = mbl_hangup,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .answer = mbl_answer,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .send_digit_begin = mbl_digit_begin,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .send_digit_end = mbl_digit_end,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .read = mbl_read,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .write = mbl_write,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .fixup = mbl_fixup,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .devicestate = mbl_devicestate
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+/* CLI Commands implementation */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_show_devices(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char bdaddr[18];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char group[6];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#define FORMAT1 "%-15.15s %-17.17s %-5.5s %-15.15s %-9.9s %-5.5s %-3.3s\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ switch (cmd) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_INIT:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->command = "mobile show devices";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->usage =
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ "Usage: mobile show devices\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ " Shows the state of Bluetooth Cell / Mobile devices.\n";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_GENERATE:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (a->argc != 3)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SHOWUSAGE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, FORMAT1, "ID", "Address", "Group", "Adapter", "Connected", "State", "SMS");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ba2str(&pvt->addr, bdaddr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ snprintf(group, 5, "%d", pvt->group);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, FORMAT1, pvt->id, bdaddr, group, pvt->adapter->id, pvt->connected ? "Yes" : "No",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ (pvt->state == MBL_STATE_IDLE) ? "Free" : (pvt->state < MBL_STATE_IDLE) ? "Init" : "Busy",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ (pvt->has_sms) ? "Yes" : "No");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#undef FORMAT1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_search(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ inquiry_info *ii = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int max_rsp, num_rsp;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int len, flags;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int i, phport, hsport;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char addr[19] = {0};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char name[31] = {0};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#define FORMAT1 "%-17.17s %-30.30s %-6.6s %-7.7s %-4.4s\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#define FORMAT2 "%-17.17s %-30.30s %-6.6s %-7.7s %d\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ switch (cmd) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_INIT:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->command = "mobile search";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->usage =
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ "Usage: mobile search\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ " Searches for Bluetooth Cell / Mobile devices in range.\n";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_GENERATE:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (a->argc != 2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SHOWUSAGE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* find a free adapter */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&adapters, adapter, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!adapter->inuse)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!adapter) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, "All Bluetooth adapters are in use at this time.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ len = 8;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ max_rsp = 255;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ flags = IREQ_CACHE_FLUSH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ii = alloca(max_rsp * sizeof(inquiry_info));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ num_rsp = hci_inquiry(adapter->dev_id, len, max_rsp, NULL, &ii, flags);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (num_rsp > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, FORMAT1, "Address", "Name", "Usable", "Type", "Port");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (i = 0; i < num_rsp; i++) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ba2str(&(ii + i)->bdaddr, addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ name[0] = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (hci_read_remote_name(adapter->hci_socket, &(ii + i)->bdaddr, sizeof(name) - 1, name, 0) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ strcpy(name, "[unknown]");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ phport = sdp_search(addr, HANDSFREE_AGW_PROFILE_ID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!phport)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hsport = sdp_search(addr, HEADSET_PROFILE_ID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hsport = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, FORMAT2, addr, name, (phport > 0 || hsport > 0) ? "Yes" : "No",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ (phport > 0) ? "Phone" : "Headset", (phport > 0) ? phport : hsport);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, "No Bluetooth Cell / Mobile devices found.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#undef FORMAT1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+#undef FORMAT2
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+static char *handle_cli_mobile_rfcomm(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char buf[128];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ struct mbl_pvt *pvt = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ switch (cmd) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_INIT:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->command = "mobile rfcomm";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ e->usage =
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ "Usage: mobile rfcomm <device ID> <command>\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ " Send <command> to the rfcomm port on the device\n"
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ " with the specified <device ID>.\n";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case CLI_GENERATE:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (a->argc != 4)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SHOWUSAGE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (!strcmp(pvt->id, a->argv[2]))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt || !pvt->connected) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_cli(a->fd, "Device %s not found.\n", a->argv[2]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ snprintf(buf, sizeof(buf), "%s\r", a->argv[3]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ return CLI_SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Dialplan applications implementation
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_status_exec(struct ast_channel *ast, void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *parse;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int stat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char status[2];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_DECLARE_APP_ARGS(args,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_APP_ARG(device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_APP_ARG(variable);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ );
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(data))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ parse = ast_strdupa(data);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_STANDARD_APP_ARGS(args, parse);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(args.device) || ast_strlen_zero(args.variable))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ stat = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcmp(pvt->id, args.device))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->connected)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ stat = 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->owner)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ stat = 3;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(status, "%d", stat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pbx_builtin_setvar_helper(ast, args.variable, status);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_sendsms_exec(struct ast_channel *ast, void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *parse;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_DECLARE_APP_ARGS(args,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_APP_ARG(device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_APP_ARG(dest);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_APP_ARG(message);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ );
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(data))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ parse = ast_strdupa(data);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_STANDARD_APP_ARGS(args, parse);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(args.device)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"NULL device for message -- SMS will not be sent.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(args.dest)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"NULL destination for message -- SMS will not be sent.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_strlen_zero(args.message)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"NULL Message to be sent -- SMS will not be sent.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcmp(pvt->id, args.device))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"Bluetooth device %s wasn't found in the list -- SMS will not be sent.\n", args.device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt->connected) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"Bluetooth device %s wasn't connected -- SMS will not be sent.\n", args.device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt->has_sms) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"Bluetooth device %s doesn't handle SMS -- SMS will not be sent.\n", args.device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->state != MBL_STATE_IDLE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR,"Bluetooth device %s isn't IDLE -- SMS will not be sent.\n", args.device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(pvt->dial_number, args.dest, sizeof(pvt->dial_number));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(pvt->sms_txt, args.message, sizeof(pvt->sms_txt));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_OUTSMS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Channel Driver callbacks
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_channel *chn;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pipe(pvt->io_pipe) == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Failed to create io_pipe.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket != -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->io_save_len = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sent_answer = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->skip_frames = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->alignment_count = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->alignment_detection_triggered = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->adapter->alignment_detection)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_alignment_detection = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_alignment_detection = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_hangup = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn = ast_channel_alloc(1, state, cid_num, pvt->id, 0, 0, pvt->context, 0, "Mobile/%s-%04lx", pvt->id, ast_random() & 0xffff);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (chn) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->tech = &mbl_tech;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->nativeformats = prefformat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->rawreadformat = prefformat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->rawwriteformat = prefformat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->writeformat = prefformat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->readformat = prefformat;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->tech_pvt = pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_channel_set_fd(chn, 0, pvt->io_pipe[0]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (state == AST_STATE_RING)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn->rings = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_string_field_set(chn, language, "en");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->owner = chn;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return chn;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_channel *mbl_request(const char *type, int format, void *data, int *cause)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_channel *chn = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *dest_dev = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *dest_num = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int oldformat, group;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!data) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Channel requested with no data\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ oldformat = format;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ format &= (AST_FORMAT_SLINEAR);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!format) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Asked to get a channel of unsupported format '%d'\n", oldformat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *cause = AST_CAUSE_FACILITY_NOT_IMPLEMENTED;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dest_dev = ast_strdupa((char *)data);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dest_num = strchr(dest_dev, '/');
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (dest_num)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *dest_num++ = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Find requested device and make sure its connected. */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (((dest_dev[0] == 'g') || (dest_dev[0] == 'G')) && ((dest_dev[1] >= '0') && (dest_dev[1] <= '9'))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group = atoi(dest_dev+1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->group == group)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (!strcmp(pvt->id, dest_dev)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt || !pvt->connected || pvt->owner) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Request to call on device %s which is not connected / already in use.\n", dest_dev);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *cause = AST_CAUSE_REQUESTED_CHAN_UNAVAIL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pvt->type == MBL_TYPE_PHONE) && !dest_num) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Cant determine destination number.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *cause = AST_CAUSE_INCOMPATIBLE_DESTINATION;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn = mbl_new(AST_STATE_DOWN, pvt, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!chn) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *cause = AST_CAUSE_REQUESTED_CHAN_UNAVAIL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return chn;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_call(struct ast_channel *ast, char *dest, int timeout)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *dest_dev = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *dest_num = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dest_dev = ast_strdupa((char *)dest);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->type == MBL_TYPE_PHONE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dest_num = strchr(dest_dev, '/');
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!dest_num) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Cant determine destination number.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *dest_num++ = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "mbl_call called on %s, neither down nor reserved\n", ast->name);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Calling %s on %s\n", dest, ast->name);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->type == MBL_TYPE_PHONE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(pvt->dial_number, dest_num, sizeof(pvt->dial_number));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_DIAL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->dial_timeout = (timeout == 0) ? 30 : timeout;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_hangup(struct ast_channel *ast)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!ast->tech_pvt) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Asked to hangup channel not connected\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Hanging up device %s.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_channel_set_fd(ast, 0, -1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->io_pipe[0]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->io_pipe[1]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->type == MBL_TYPE_HEADSET && pvt->sco_socket != -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pvt->state == MBL_STATE_INCOMING || pvt->state == MBL_STATE_OUTGOING || pvt->state == MBL_STATE_DIAL1 || pvt->state == MBL_STATE_RING3) && pvt->type == MBL_TYPE_PHONE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->do_hangup) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CHUP\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_HANGUP;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->hangup_count = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->owner = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast->tech_pvt = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_setstate(ast, AST_STATE_DOWN);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_answer(struct ast_channel *ast)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "ATA\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_setstate(ast, AST_STATE_UP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sent_answer = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_digit_begin(struct ast_channel *chan, char digit)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_digit_end(struct ast_channel *ast, char digit, unsigned int duration)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char buf[11];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->type == MBL_TYPE_HEADSET)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Dialed %c\n", digit);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ switch(digit) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '0':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '1':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '2':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '3':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '4':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '5':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '6':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '7':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '8':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '9':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '*':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case '#':
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(buf, "AT+VTS=%c\r", digit);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Unknown digit '%c'\n", digit);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static struct ast_frame *mbl_read(struct ast_channel *ast)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_frame *f;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int r;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "*** mbl_read()\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!pvt->owner) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return &ast_null_frame;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&pvt->fr, 0x00, sizeof(struct ast_frame));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.frametype = AST_FRAME_VOICE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.subclass = DEVICE_FRAME_FORMAT;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.datalen = CHANNEL_FRAME_SIZE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.samples = CHANNEL_FRAME_SIZE / 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.src = "Mobile";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.offset = AST_FRIENDLY_OFFSET;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.mallocd = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.delivery.tv_sec = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.delivery.tv_usec = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.data = pvt->io_buf + AST_FRIENDLY_OFFSET;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((r = read(pvt->io_pipe[0], pvt->fr.data, CHANNEL_FRAME_SIZE)) != CHANNEL_FRAME_SIZE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (r == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "read error %d\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return &ast_null_frame;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.datalen = r;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.samples = r / 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ f = ast_dsp_process(0, pvt->dsp, &pvt->fr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (f && (f->frametype == AST_FRAME_DTMF_END)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.frametype = AST_FRAME_DTMF_END;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->fr.subclass = f->subclass;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return &pvt->fr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_write(struct ast_channel *ast, struct ast_frame *frame)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt = ast->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int i, r, io_need, num_frames;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *pfr, buf[DEVICE_FRAME_SIZE];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "*** mbl_write\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (frame->frametype != AST_FRAME_VOICE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ io_need = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->io_save_len > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ io_need = DEVICE_FRAME_SIZE - pvt->io_save_len;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memcpy(pvt->io_save_buf + pvt->io_save_len, frame->data, io_need);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sco_write(pvt->sco_socket, pvt->io_save_buf, DEVICE_FRAME_SIZE);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->do_alignment_detection)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ do_alignment_detection(pvt, buf, r);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (ast->_state == AST_STATE_UP) /* Dont queue the audio in the pipe if the call is not up yet. just toss it. */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ sco_write(pvt->io_pipe[1], buf, r);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ num_frames = (frame->datalen - io_need) / DEVICE_FRAME_SIZE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pfr = frame->data + io_need;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (i=0; i
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sco_write(pvt->sco_socket, pfr, DEVICE_FRAME_SIZE);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((r = sco_read(pvt->sco_socket, buf, DEVICE_FRAME_SIZE))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->do_alignment_detection)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ do_alignment_detection(pvt, buf, r);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (ast->_state == AST_STATE_UP)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ sco_write(pvt->io_pipe[1], buf, r);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pfr += DEVICE_FRAME_SIZE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->io_save_len = (frame->datalen - io_need) - (num_frames * DEVICE_FRAME_SIZE);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->io_save_len > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memcpy(pvt->io_save_buf, pfr, pvt->io_save_len);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt = oldchan->tech_pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt && pvt->owner == oldchan)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->owner = newchan;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_devicestate(void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *device;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int res = AST_DEVICE_INVALID;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ device = ast_strdupa(S_OR(data, ""));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Checking device state for device %s\n", device);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcmp(pvt->id, device))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->connected) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->owner)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ res = AST_DEVICE_INUSE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ res = AST_DEVICE_NOT_INUSE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return res;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Callback helpers
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ do_alignment_detection()
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ This routine attempts to detect where we get misaligned sco audio data from the bluetooth adaptor.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Its enabled by alignmentdetect=yes under the adapter entry in mobile.conf
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Some adapters suffer a problem where occasionally they will byte shift the audio stream one byte to the right.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ The result is static or white noise on the inbound (from the adapter) leg of the call.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ This is characterised by a sudden jump in magnitude of the value of the 16 bit samples.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Here we look at the first 4 48 byte frames. We average the absolute values of each sample in the frame,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ then average the sum of the averages of frames 1, 2, and 3.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Frame zero is usually zero.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ If the end result > 100, and it usually is if we have the problem, set a flag and compensate by shifting the bytes
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for each subsequent frame during the call.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ If the result is <= 100 then clear the flag so we dont come back in here...
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ This seems to work OK....
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void do_alignment_detection(struct mbl_pvt *pvt, char *buf, int buflen)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int i;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ short a, *s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *p;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->alignment_detection_triggered) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (i=buflen, p=buf+buflen-1; i>0; i--, p--)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *p = *(p-1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *(p+1) = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->alignment_count < 4) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ s = (short *)buf;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (i=0, a=0; i
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ a += *s++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ a /= i+1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->alignment_samples[pvt->alignment_count++] = a;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Alignment Detection result is [%-d %-d %-d %-d]\n", pvt->alignment_samples[0], pvt->alignment_samples[1], pvt->alignment_samples[2], pvt->alignment_samples[3]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ a = abs(pvt->alignment_samples[1]) + abs(pvt->alignment_samples[2]) + abs(pvt->alignment_samples[3]);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ a /= 3;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (a > 100) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->alignment_detection_triggered = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Alignment Detection Triggered.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_alignment_detection = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm helpers
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_connect(bdaddr_t src, bdaddr_t dst, int remote_channel) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct sockaddr_rc addr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((s = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "socket() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&addr, 0, sizeof(addr));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.rc_family = AF_BLUETOOTH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bacpy(&addr.rc_bdaddr, &src;;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.rc_channel = (uint8_t) 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "bind() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(s);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&addr, 0, sizeof(addr));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.rc_family = AF_BLUETOOTH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bacpy(&addr.rc_bdaddr, &dst);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.rc_channel = remote_channel;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "connect() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(s);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_write(struct mbl_pvt *pvt, char *buf)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *p;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ssize_t num_write;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int len;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "rfcomm_write() (%s) [%s]\n", pvt->id, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ len = strlen(buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p = buf;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (len > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((num_write = write(pvt->rfcomm_socket, p, len)) == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "rfcomm_write() error [%d]\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ len -= num_write;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p += num_write;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Here we need to return complete '\r' terminated single responses to the devices monitor thread, or
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ a timeout if nothing is available.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ The rfcomm connection to the device is asynchronous, so there is no guarantee that responses will
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ be returned in a single read() call. We handle this by buffering the input and returning one response
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ per call, or a timeout if nothing is available.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int rfcomm_read(struct mbl_pvt *pvt, char *buf, char flush, int timeout)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int sel, rlen, slen;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ fd_set rfds;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct timeval tv;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *p;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!flush) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p = strchr(pvt->rfcomm_buf, '\r'))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *p++ = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*p == '\n')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memmove(buf, pvt->rfcomm_buf, strlen(pvt->rfcomm_buf));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *(buf + strlen(pvt->rfcomm_buf)) = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memmove(pvt->rfcomm_buf, p, strlen(p));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *(pvt->rfcomm_buf+strlen(p)) = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->rfcomm_buf[0] = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ FD_ZERO(&rfds);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ FD_SET(pvt->rfcomm_socket, &rfds);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ tv.tv_sec = timeout;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ tv.tv_usec = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((sel = select(pvt->rfcomm_socket + 1, &rfds, NULL, NULL, &tv)) > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (FD_ISSET(pvt->rfcomm_socket, &rfds)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ slen = strlen(pvt->rfcomm_buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rlen = read(pvt->rfcomm_socket, pvt->rfcomm_buf + slen, sizeof(pvt->rfcomm_buf) - slen - 1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (rlen > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->rfcomm_buf[slen+rlen] = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p = strchr(pvt->rfcomm_buf, '\r'))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *p++ = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*p == '\n')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memmove(buf, pvt->rfcomm_buf, strlen(pvt->rfcomm_buf));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *(buf + strlen(pvt->rfcomm_buf)) = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memmove(pvt->rfcomm_buf, p, strlen(p));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ *(pvt->rfcomm_buf+strlen(p)) = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return rlen;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (sel == 0) { /* timeout */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sco helpers
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_connect(bdaddr_t src, bdaddr_t dst)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct sockaddr_sco addr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "socket() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&addr, 0, sizeof(addr));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.sco_family = AF_BLUETOOTH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bacpy(&addr.sco_bdaddr, &src;;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "bind() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(s);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&addr, 0, sizeof(addr));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.sco_family = AF_BLUETOOTH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bacpy(&addr.sco_bdaddr, &dst);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "sco connect() failed (%d).\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(s);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_write(int s, char *buf, int len)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int r;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (s == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco_write() not ready\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco_write()\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ r = write(s, buf, len);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (r == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco write error %d\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sco_read(int s, char *buf, int len)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int r;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (s == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco_read() not ready\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco_read()\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ r = read(s, buf, len);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (r == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(2, "sco_read() error %d\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return r;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp helpers
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int sdp_search(char *addr, int profile)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_session_t *session = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bdaddr_t bdaddr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uuid_t svc_uuid;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uint32_t range = 0x0000ffff;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_t *response_list, *search_list, *attrid_list;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int status, port;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_t *proto_list;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_record_t *sdprec;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ str2ba(addr, &bdaddr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ port = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ session = sdp_connect(BDADDR_ANY, &bdaddr, SDP_RETRY_IF_BUSY);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!session) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "sdp_connect() failed on device %s.\n", addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid32_create(&svc_uuid, profile);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ search_list = sdp_list_append(0, &svc_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ attrid_list = sdp_list_append(0, &range);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ response_list = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ status = sdp_service_search_attr_req(session, search_list, SDP_ATTR_REQ_RANGE, attrid_list, &response_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (status == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (response_list) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdprec = (sdp_record_t *) response_list->data;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ proto_list = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (sdp_get_access_protos(sdprec, &proto_list) == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ port = sdp_get_proto_port(proto_list, RFCOMM_UUID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(proto_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_record_free(sdprec);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(response_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "No responses returned for device %s.\n", addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "sdp_service_search_attr_req() failed on device %s.\n", addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(search_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(attrid_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_close(session);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return port;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static sdp_session_t *sdp_register(void)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uint32_t service_uuid_int[] = {0, 0, 0, GENERIC_AUDIO_SVCLASS_ID};
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uint8_t rfcomm_channel = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ const char *service_name = "Asterisk PABX";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ const char *service_dsc = "Asterisk PABX";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ const char *service_prov = "Asterisk";
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uuid_t root_uuid, l2cap_uuid, rfcomm_uuid, svc_uuid, svc_class1_uuid, svc_class2_uuid;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_t *l2cap_list = 0, *rfcomm_list = 0, *root_list = 0, *proto_list = 0, *access_proto_list = 0, *svc_uuid_list = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_data_t *channel = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int err = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_session_t *session = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_record_t *record = sdp_record_alloc();
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid128_create(&svc_uuid, &service_uuid_int);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_set_service_id(record, svc_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid32_create(&svc_class1_uuid, GENERIC_AUDIO_SVCLASS_ID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid32_create(&svc_class2_uuid, HEADSET_PROFILE_ID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ svc_uuid_list = sdp_list_append(0, &svc_class1_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ svc_uuid_list = sdp_list_append(svc_uuid_list, &svc_class2_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_set_service_classes(record, svc_uuid_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ root_list = sdp_list_append(0, &root_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_set_browse_groups( record, root_list );
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ l2cap_list = sdp_list_append(0, &l2cap_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ proto_list = sdp_list_append(0, l2cap_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ channel = sdp_data_alloc(SDP_UINT8, &rfcomm_channel);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_list = sdp_list_append(0, &rfcomm_uuid);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_append(rfcomm_list, channel);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_append(proto_list, rfcomm_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ access_proto_list = sdp_list_append(0, proto_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_set_access_protos(record, access_proto_list);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_set_info_attr(record, service_name, service_prov, service_dsc);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!(session = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY)))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Failed to connect sdp and create session.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ err = sdp_record_register(session, record, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_data_free(channel);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(rfcomm_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(root_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(access_proto_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_list_free(svc_uuid_list, 0);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return session;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Thread routines
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void *do_monitor_phone(void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt = (struct mbl_pvt *)data;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_channel *chn;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char monitor = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char buf[256];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char cid_num[AST_MAX_EXTENSION], *pcids, *pcide;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int s, t, i, smsi;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int group, group2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int callp = 0, callsetupp;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char brsf, nsmode, *p, *p1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char sms_src[13];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char sms_txt[160];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ brsf = nsmode = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!rfcomm_write(pvt, "AT+BRSF=4\r"))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (monitor) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->state == MBL_STATE_DIAL1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = pvt->dial_timeout;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else if (pvt->state == MBL_STATE_HANGUP)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else if (pvt->state == MBL_STATE_OUTSMS1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else if (pvt->state == MBL_STATE_OUTSMS2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 10;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ s = rfcomm_read(pvt, buf, 0, t);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((s > 0) && (buf[0] != 0x0) && (buf[0] != '\r')) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "rfcomm_read() (%s) [%s]\n", pvt->id, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ switch (pvt->state) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+BRSF:")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ brsf = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "ERROR") && !nsmode) { /* Hmmm, Non-Standard Phone, just continue */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CIND=?\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ nsmode = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "OK") && brsf) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CIND=?\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT1:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+CIND:")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group = callp = callsetupp = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group2 = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (i=0; i
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (buf[i] == '(')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (buf[i] == ')') {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group--;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (group == 0)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group2++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf+i, "\"call\""))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ callp = group2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf+i, "\"call_setup\""))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ callsetupp = group2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf+i, "\"callsetup\""))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ callsetupp = group2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_call_0, "%d,0", callp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_call_1, "%d,1", callp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_callsetup_0, "%d,0", callsetupp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_callsetup_1, "%d,1", callsetupp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_callsetup_2, "%d,2", callsetupp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(pvt->ciev_callsetup_3, "%d,3", callsetupp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (callsetupp == 0) /* This phone has no call setup indication!! ... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->no_callsetup = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "CIEV_CALL=%d CIEV_CALLSETUP=%d\n", callp, callsetupp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CIND?\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT2:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p = strstr(buf, "+CIND:"))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p += 5;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*(p+(callp*2)) == '1') {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has a call in progress - delaying connection.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CMER=3,0,0,1\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT3:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CLIP=1\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT4:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ rfcomm_write(pvt, "AT+VGS=15\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INIT5:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ rfcomm_write(pvt, "AT+CMGF=1\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case MBL_STATE_INIT6:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "ERROR")) { /* No SMS Support ! */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_PREIDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CNMI=2,1,0,1,0\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ case MBL_STATE_INIT7:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) { /* We have SMS Support */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->has_sms = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_PREIDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "ERROR")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->has_sms = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_PREIDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_PREIDLE: /* Nothing handled here, wait for timeout, then off we go... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_IDLE:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Device %s [%s]\n", pvt->id, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "RING")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "+CIEV:")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, pvt->ciev_callsetup_3)) { /* User has dialed out on handset */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0; /* We disconnect now, as he is */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } /* probably leaving BT range... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_DIAL: /* Nothing handled here, we need to wait for a timeout */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_DIAL1:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->no_callsetup) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_ANSWER);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_setstate(pvt->owner, AST_STATE_RINGING);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_OUTGOING;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_OUTGOING:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+CIEV")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, pvt->ciev_call_0)) { /* call was hung up */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_hangup = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, pvt->ciev_callsetup_3)) { /* b-party ringing */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_RINGING);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, pvt->ciev_call_1) && !pvt->no_callsetup) { /* b-party answer */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_ANSWER);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_RING:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cid_num[0] = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pcids = strstr(buf, "+CLIP:"))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pcids = strchr(pcids, '"'))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pcide = strchr(pcids+1, '"'))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ strncpy(cid_num, pcids+1, pcide - pcids - 1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cid_num[pcide - pcids - 1] = 0x00;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn = mbl_new(AST_STATE_RING, pvt, cid_num);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (chn) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pbx_start(chn)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to start pbx on incoming call.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_hangup(chn);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING3;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to allocate channel for incoming call.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CHUP\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_RING2:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn = mbl_new(AST_STATE_RING, pvt, cid_num);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (chn) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pbx_start(chn)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to start pbx on incoming call.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_hangup(chn);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING3;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to allocate channel for incoming call.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CHUP\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_RING3:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+CIEV")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, pvt->ciev_call_1)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sent_answer) { /* We answered */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_INCOMING;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else { /* User answered on handset!, disconnect */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket > -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((strstr(buf, pvt->ciev_callsetup_0) || strstr(buf, pvt->ciev_call_0))) { /* Caller disconnected */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INCOMING:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+CIEV")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, pvt->ciev_call_0)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->do_hangup = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_HANGUP:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK") || strstr(buf, pvt->ciev_call_0)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INSMS:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "+CMGR:")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(sms_src, 0x00, sizeof(sms_src));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p = strchr(buf, ','))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*(++p) == '"')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p1 = strchr(p, ','))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*(--p1) == '"')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p1--;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(sms_src, 0x00, sizeof(sms_src));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ strncpy(sms_src, p, p1 - p + 1);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ chn = mbl_new(AST_STATE_DOWN, pvt, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ strcpy(chn->exten, "sms");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pbx_builtin_setvar_helper(chn, "SMSSRC", sms_src);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pbx_builtin_setvar_helper(chn, "SMSTXT", sms_txt);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pbx_start(chn))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to start pbx on incoming sms.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(sms_txt, buf, sizeof(sms_txt));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_OUTSMS:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_OUTSMS1:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_OUTSMS2:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "OK")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Unsolicited responses */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (strstr(buf, "+CMTI:")) { /* SMS Incoming... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((p = strchr(buf, ','))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ p++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ smsi = atoi(p);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (smsi > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(buf, "AT+CMGR=%d\r", smsi);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_INSMS;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (s == 0) { /* Timeouts */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->state == MBL_STATE_INIT2) { /* Some devices dont respond to AT+CIND? properly. RIM Blackberry 4 example */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CMER=3,0,0,1\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ } else if (pvt->state == MBL_STATE_INIT3) { /* Some devices dont respond to AT+CMER=3,0,0,1 properly. VK 2020 for example */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CLIP=1\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_PREIDLE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->connected = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s initialised and ready.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_DIAL) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(buf, "ATD%s;\r", pvt->dial_number);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!rfcomm_write(pvt, buf)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Dial failed on %s state %d\n", pvt->owner->name, pvt->state);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_CONGESTION);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_DIAL1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_DIAL1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Dial failed on %s state %d\n", pvt->owner->name, pvt->state);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_CONGESTION);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_RING) { /* No CLIP?, bump it */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_HANGUP) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->do_hangup) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->hangup_count == 6) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Device %s failed to hangup after 6 tries, disconnecting.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "AT+CHUP\r");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->hangup_count++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_OUTSMS) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sprintf(buf, "AT+CMGS=\"%s\"\r", pvt->dial_number);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_OUTSMS1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_OUTSMS1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->rfcomm_buf[0] == '>') {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ snprintf(buf, sizeof(buf), "%s%c", pvt->sms_txt, 0x1a);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_OUTSMS2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Failed to send SMS to %s on device %s\n", pvt->dial_number, pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_OUTSMS2) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Failed to send SMS to %s on device %s\n", pvt->dial_number, pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (s == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (option_verbose > 2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has disconnected, reason (%d).\n", pvt->id, errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->rfcomm_socket > -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->rfcomm_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket > -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->connected = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->monitor_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_cancel(pvt->sco_listener_thread);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_join(pvt->sco_listener_thread, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_listener_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->adapter->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ manager_event(EVENT_FLAG_SYSTEM, "MobileStatus", "Status: Disconnect\r\nDevice: %s\r\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->adapter->inuse = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void *do_monitor_headset(void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt = (struct mbl_pvt *)data;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char monitor = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char buf[256];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int s, t;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_PREIDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (monitor) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->state == MBL_STATE_RING2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ t = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ s = rfcomm_read(pvt, buf, 0, t);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((s > 0) && (buf[0] != 0x0) && (buf[0] != '\r')) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "rfcomm_read() (%s) [%s]\n", pvt->id, buf);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ switch (pvt->state) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_RING2:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "AT+CKPD=")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_ANSWER);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_INCOMING;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "\r\n+VGS=13\r\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "\r\n+VGM=13\r\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ case MBL_STATE_INCOMING:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "AT+CKPD=")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ default:
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strstr(buf, "AT+VGS=")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "\r\nOK\r\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (strstr(buf, "AT+VGM=")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "\r\nOK\r\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (s == 0) { /* Timeouts */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->state == MBL_STATE_PREIDLE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->connected = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s initialised and ready.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_IDLE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_RING) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = sco_connect(pvt->adapter->addr, pvt->addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_setstate(pvt->owner, AST_STATE_RINGING);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_RINGING);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_RING2;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_queue_control(pvt->owner, AST_CONTROL_HANGUP);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (pvt->state == MBL_STATE_RING2) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ rfcomm_write(pvt, "\r\nRING\r\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else if (s == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (option_verbose > 2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has disconnected, reason (%d).\n", pvt->id, errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ monitor = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->rfcomm_socket > -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->rfcomm_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket > -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->connected = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->monitor_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ manager_event(EVENT_FLAG_SYSTEM, "MobileStatus", "Status: Disconnect\r\nDevice: %s\r\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->adapter->inuse = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int start_monitor(struct mbl_pvt *pvt)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->type == MBL_TYPE_PHONE) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pthread_create_background(&pvt->monitor_thread, NULL, do_monitor_phone, pvt) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->monitor_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* we are a phone, so spin the sco listener on the adapter as well */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pthread_create_background(&pvt->sco_listener_thread, NULL, do_sco_listen, pvt->adapter) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to create sco listener thread for device %s.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pthread_create_background(&pvt->monitor_thread, NULL, do_monitor_headset, pvt) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->monitor_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void *do_discovery(void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (;;) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&adapters, adapter, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!adapter->inuse) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!adapter->inuse && !pvt->connected && !strcmp(adapter->id, pvt->adapter->id)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pvt->rfcomm_socket = rfcomm_connect(adapter->addr, pvt->addr, pvt->rfcomm_port)) > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (start_monitor(pvt)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->connected = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ adapter->inuse = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ manager_event(EVENT_FLAG_SYSTEM, "MobileStatus", "Status: Connect\r\nDevice: %s\r\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (option_verbose > 2)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has connected.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Go to sleep */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sleep(discovery_interval);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static void *do_sco_listen(void *data)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int ns;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct sockaddr_sco addr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char saddr[18];
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct sco_options so;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ socklen_t len;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int opt = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ socklen_t addrlen;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter = (struct adapter_pvt *) data;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((adapter->sco_socket = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to create sco listener socket.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ memset(&addr, 0, sizeof(addr));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addr.sco_family = AF_BLUETOOTH;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ bacpy(&addr.sco_bdaddr, &adapter->addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (bind(adapter->sco_socket, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to bind sco listener socket. (%d)\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(adapter->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (setsockopt(adapter->sco_socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to setsockopt sco listener socket.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(adapter->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (listen(adapter->sco_socket, 5) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to listen sco listener socket.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(adapter->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "About to accept() socket.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ addrlen = sizeof(struct sockaddr_sco);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((ns = accept(adapter->sco_socket, (struct sockaddr *)&addr, &addrlen)) > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "accept()ed socket.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ len = sizeof(so);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ getsockopt(ns, SOL_SCO, SCO_OPTIONS, &so, &len;;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ba2str(&addr.sco_bdaddr, saddr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Incoming Audio Connection from device %s MTU is %d\n", saddr, so.mtu);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&devices, pvt, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ if (!bacmp(&pvt->addr, &addr.sco_bdaddr))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket != -1)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = ns;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Could not find device for incoming Audio Connection.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "accept() failed %d\n", errno);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Module
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*/
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int mbl_load_config(void)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_config *cfg = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char *cat = NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct ast_variable *var;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ const char *id, *address, *useadapter, *port, *context, *type, *skip, *group, *master, *nocallsetup, *aligndetect;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ uint16_t vs;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct hci_dev_req dr;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ char nadapters = 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ struct ast_flags config_flags = { 0 };
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ cfg = ast_config_load(MBL_CONFIG, config_flags);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!cfg)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ for (var = ast_variable_browse(cfg, "general"); var; var = var->next) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcasecmp(var->name, "interval"))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ discovery_interval = atoi(var->value);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* load adapters first */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cat = ast_category_browse(cfg, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (cat) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcasecmp(cat, "adapter")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ id = ast_variable_retrieve(cfg, cat, "id");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ address = ast_variable_retrieve(cfg, cat, "address");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ master = ast_variable_retrieve(cfg, cat, "forcemaster");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ aligndetect = ast_variable_retrieve(cfg, cat, "alignmentdetection");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Loading adapter %s %s.\n", id, address);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!ast_strlen_zero(id) && !ast_strlen_zero(address)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((adapter = ast_calloc(1, sizeof(*adapter)))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(adapter->id, id, sizeof(adapter->id));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ str2ba(address, &adapter->addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!ast_strlen_zero(aligndetect)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (*aligndetect == 'Y' || *aligndetect == 'y')
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ adapter->alignment_detection = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ adapter->dev_id = hci_devid(address);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ adapter->hci_socket = hci_open_dev(adapter->dev_id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (adapter->dev_id < 0 || adapter->hci_socket < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to open adapter %s. It won't be enabled.\n", adapter->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_free(adapter);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((master) && (*master)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dr.dev_id = adapter->dev_id;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (hci_strtolm("master", &dr.dev_opt)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ioctl(adapter->hci_socket, HCISETLINKMODE, (unsigned long) &dr) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "Unable to set adapter %s link mode to MASTER.\n", adapter->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hci_read_voice_setting(adapter->hci_socket, &vs, 1000);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ vs = htobs(vs);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (vs != 0x0060) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Incorrect voice setting for adapter %s, it must be 0x0060 - see 'man hciconfig' for details.\n", adapter->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hci_close_dev(adapter->hci_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_free(adapter);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_INSERT_HEAD(&adapters, adapter, entry);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ nadapters++;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "id/address missing for adapter %s. It won't be enabled.\n", cat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cat = ast_category_browse(cfg, cat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!nadapters) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "***********************************************************************\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "No Adapters defined. Please review mobile.conf. See sample for details.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_WARNING, "***********************************************************************\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* now load devices */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cat = ast_category_browse(cfg, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while (cat) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (strcasecmp(cat, "general") && strcasecmp(cat, "adapter")) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Loading device %s.\n", cat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ address = ast_variable_retrieve(cfg, cat, "address");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ useadapter = ast_variable_retrieve(cfg, cat, "adapter");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ port = ast_variable_retrieve(cfg, cat, "port");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ context = ast_variable_retrieve(cfg, cat, "context");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ type = ast_variable_retrieve(cfg, cat, "type");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ skip = ast_variable_retrieve(cfg, cat, "dtmfskip");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ group = ast_variable_retrieve(cfg, cat, "group");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ nocallsetup = ast_variable_retrieve(cfg, cat, "nocallsetup");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!ast_strlen_zero(address) && !ast_strlen_zero(port) && !ast_strlen_zero(useadapter)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* find the adapter */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_TRAVERSE(&adapters, adapter, entry) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!strcmp(adapter->id, useadapter))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!adapter) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Device %s configured to use unknown adapter %s. It won't be enabled.\n", cat, useadapter);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ break;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pvt = ast_calloc(1, sizeof(*pvt)))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (type && !strcmp(type, "headset"))
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->type = MBL_TYPE_HEADSET;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->type = MBL_TYPE_PHONE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(pvt->id, cat, sizeof(pvt->id));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ str2ba(address, &pvt->addr);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_copy_string(pvt->context, S_OR(context, "default"), sizeof(pvt->context));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (group)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->group = atoi(group); /* group 0 if invalid */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->state = MBL_STATE_INIT;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->rfcomm_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->rfcomm_port = atoi(port);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_socket = -1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->monitor_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->sco_listener_thread = AST_PTHREADT_NULL;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!ast_strlen_zero(nocallsetup)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((*nocallsetup == 'y') || (*nocallsetup == 'Y')) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->no_callsetup = 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+ ast_debug(1, "Setting nocallsetup mode for device %s.\n", pvt->id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->dsp = ast_dsp_new();
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (skip) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if ((pvt->dtmf_skip = atoi(skip)) == 0)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->dtmf_skip = 200;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->dtmf_skip = 200;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
+ ast_dsp_set_features(pvt->dsp, DSP_FEATURE_DTMF_DETECT);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
+ ast_dsp_digitmode(pvt->dsp, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pvt->adapter = adapter;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ AST_LIST_INSERT_HEAD(&devices, pvt, entry);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Device %s has no address/port/adapter configured. It won't be enabled.\n", cat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ cat = ast_category_browse(cfg, cat);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_config_destroy(cfg);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int unload_module(void)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct mbl_pvt *pvt;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ struct adapter_pvt *adapter;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* First, take us out of the channel loop */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_channel_unregister(&mbl_tech);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Kill the discovery thread */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (discovery_thread != AST_PTHREADT_NULL) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_cancel(discovery_thread);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_join(discovery_thread, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Destroy the device list */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while ((pvt = AST_LIST_REMOVE_HEAD(&devices, entry))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->monitor_thread != AST_PTHREADT_NULL) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_cancel(pvt->monitor_thread);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_join(pvt->monitor_thread, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_listener_thread != AST_PTHREADT_NULL) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_cancel(pvt->sco_listener_thread);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ pthread_join(pvt->sco_listener_thread, NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->sco_socket > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->adapter->sco_socket > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->adapter->sco_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (pvt->rfcomm_socket > -1) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ close(pvt->rfcomm_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_dsp_free(pvt->dsp);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_free(pvt);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Destroy the adapter list */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ while ((adapter = AST_LIST_REMOVE_HEAD(&adapters, entry))) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hci_close_dev(adapter->hci_socket);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_free(adapter);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (sdp_session)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_close(sdp_session);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Unregister the CLI & APP */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_cli_unregister_multiple(mbl_cli, sizeof(mbl_cli) / sizeof(mbl_cli[0]));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_unregister_application(app_mblstatus);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_unregister_application(app_mblsendsms);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+static int load_module(void)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+{
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ int dev_id, s;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Check if we have Bluetooth, no point loading otherwise... */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ dev_id = hci_get_route(NULL);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ s = hci_open_dev(dev_id);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (dev_id < 0 || s < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "No Bluetooth device found. Not loading module.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return AST_MODULE_LOAD_DECLINE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ hci_close_dev(s);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (!mbl_load_config()) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to read config file %s. Not loading module.\n", MBL_CONFIG);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return AST_MODULE_LOAD_DECLINE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ sdp_session = sdp_register();
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Spin the discovery thread */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_pthread_create_background(&discovery_thread, NULL, do_discovery, NULL) < 0) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to create discovery thread.\n");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return AST_MODULE_LOAD_DECLINE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_cli_register_multiple(mbl_cli, sizeof(mbl_cli) / sizeof(mbl_cli[0]));
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_register_application(app_mblstatus, mbl_status_exec, mblstatus_synopsis, mblstatus_desc);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_register_application(app_mblsendsms, mbl_sendsms_exec, mblsendsms_synopsis, mblsendsms_desc);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ /* Make sure we can register our channel type */
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ if (ast_channel_register(&mbl_tech)) {
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ast_log(LOG_ERROR, "Unable to register channel class %s\n", "Mobile");
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return AST_MODULE_LOAD_FAILURE;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ return 0;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+}
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Bluetooth Mobile Device Channel Driver",
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .load = load_module,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ .unload = unload_module,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+);
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/configs/mobile.conf.sample b/configs/mobile.conf.sample
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
new file mode 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
index 0000000..7ef26d8
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- /dev/null
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/configs/mobile.conf.sample
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
@@ -0,0 +1,60 @@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; mobile.conf
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; configuration file for chan_mobile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[general]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+interval=30 ; Number of seconds between trying to connect to devices.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; The following is a list of adapters we use.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; id must be unique and address is the bdaddr of the adapter from hciconfig.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Each adapter may only have one device (headset or phone) connected at a time.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Add an [adapter] entry for each adapter you have.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[adapter]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+id=blue
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:09:DD:60:01:A3
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;forcemaster=yes ; attempt to force adapter into master mode. default is no.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;alignmentdetection=yes ; enable this if you sometimes get 'white noise' on asterisk side of the call
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ; its a bug in the bluetooth adapter firmware, enabling this will compensate for it.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ ; default is no.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[adapter]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+id=dlink
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:80:C8:35:52:78
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; The following is a list of the devices we deal with.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+; Every device listed below will be available for calls in and out of Asterisk.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Each device needs an adapter=xxxx entry which determines which bluetooth adapter is used.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Use the CLI command 'mobile search' to discover devices.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Use the CLI command 'mobile show devices' to see device status.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; To place a call out through a mobile phone use Dial(Mobile/[device]/NNN.....) or Dial(Mobile/gn/NNN......) in your dialplan.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; To call a headset use Dial(Mobile/[device]).
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[LGTU550]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:E0:91:7F:46:44 ; the address of the phone
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+port=4 ; the rfcomm port number (from mobile search)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+context=incoming-mobile ; dialplan context for incoming calls
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+adapter=dlink ; adapter to use
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+group=1 ; this phone is in channel group 1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+;nocallsetup=yes ; set this only if your phone reports that it supports call progress notification, but does not do it. Motorola L6 for example.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[6310i]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:60:57:32:7E:B1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+port=13
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+context=incoming-mobile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+adapter=dlink
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+group=1 ; this phone is in channel group 1 also.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[headset]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:0B:9E:11:AE:C6
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+port=1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+type=headset ; This is a headset, not a Phone !
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+adapter=blue
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[headset1]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:0B:9E:11:74:A5
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+port=1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+type=headset
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+adapter=dlink
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/configure.ac b/configure.ac
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
index 20e8e33..b8ebbf5 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- a/configure.ac
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/configure.ac
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
@@ -211,6 +211,8 @@ AST_EXT_LIB_SETUP([ALSA], [Advanced Linux Sound Architecture], [asound])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
# BKTR is used for backtrace support on platforms that do not
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
# have it natively.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
AST_EXT_LIB_SETUP([BKTR], [Stack Backtrace support], [execinfo])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+AST_EXT_LIB_SETUP([BLUETOOTH], [Bluetooth Support], [bluetooth])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
+AST_EXT_LIB_SETUP([CURL], [cURL], [curl])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
AST_EXT_LIB_SETUP([CAP], [POSIX 1.e capabilities], [cap])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
e712aab |
AST_EXT_LIB_SETUP([CURL], [cURL], [curl])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
AST_EXT_LIB_SETUP([CURSES], [curses], [curses])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
@@ -574,6 +576,8 @@ AC_CHECK_SIZEOF(int)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
AST_EXT_LIB_CHECK([ALSA], [asound], [snd_spcm_init], [alsa/asoundlib.h], [-lm -ldl])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+AST_EXT_LIB_CHECK([BLUETOOTH], [bluetooth], [ba2str], [bluetooth/bluetooth.h])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
AST_EXT_LIB_CHECK([CURSES], [curses], [initscr], [curses.h])
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
if test "x${host_os}" = "xlinux-gnu" ; then
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/doc/chan_mobile.txt b/doc/chan_mobile.txt
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
new file mode 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
index 0000000..32fcfd4
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- /dev/null
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/doc/chan_mobile.txt
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
@@ -0,0 +1,240 @@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Asterisk Channel Driver to allow Bluetooth Cell/Mobile Phones to be used as FXO devices, and Headsets as FXS devices.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Features :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Multiple Bluetooth Adapters supported.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Multiple phones can be connected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Multiple headsets can be connected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Asterisk automatically connects to each configured mobile phone / headset when it comes in range.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+CLI command to discover bluetooth devices.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Inbound calls on the mobile network to the mobile phones are handled by Asterisk, just like inbound calls on a Zap channel.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+CLI passed through on inbound calls.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Dial outbound on a mobile phone using Dial(Mobile/device/nnnnnnn) in the dialplan.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Dial a headset using Dial(Mobile/device) in the dialplan.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Application MobileStatus can be used in the dialplan to see if a mobile phone / headset is connected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Supports devicestate for dialplan hinting.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Supports Inbound and Outbound SMS.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Supports 'channel' groups for implementing 'GSM Gateways'
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Requirements :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+In order to use chan_mobile, you must have a working bluetooth subsystem on your Asterisk box.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This means one or more working bluetooth adapters, and the BlueZ packages.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Any bluetooth adapter supported by the Linux kernel will do, including usb bluetooth dongles.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The BlueZ package you need is bluez-utils. If you are using a GUI then you might want to install bluez-pin also.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+You also need libbluetooth, and libbluetooth-dev if you are compiling Asterisk from source.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+You need to get bluetooth working with your phone before attempting to use chan_mobile.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This means 'pairing' your phone or headset with your Asterisk box. I dont describe how to do this here as the process
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+differs from distro to distro. You only need to pair once per adapter.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+See www.bluez.org for details about setting up Bluetooth under Linux.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Concepts :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile deals with both bluetooth adapters and bluetooth devices. This means you need to tell chan_mobile about the
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+bluetooth adapters installed in your server as well as the devices (phones / headsets) you wish to use.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile currently only allows one device (phone or headset) to be connected to an adapter at a time. This means you need
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+one adapter for each device you wish to use simultaneously. Much effort has gone into trying to make multiple devices per adapter
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+work, but in short it doesnt.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Periodically chan_mobile looks at each configured adapter, and if it is not in use (i.e. no device connected) will initiate a
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+search for devices configured to use this adapater that may be in range. If it finds one it will connect the device and it
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+will be available for Asterisk to use. When the device goes out of range, chan_mobile will disconnect the device and the adapter
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+will become available for other devices.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Configuring chan_mobile :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The configuration file for chan_mobile is /etc/asterisk/mobile.conf. It is a normal Asterisk config file consisting of sections and key=value pairs.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+See configs/mobile.conf.sample for an example and an explanation of the configuration.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Using chan_mobile :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile.so must be loaded either by loading it using the Asterisk CLI, or by adding it to /etc/asterisk/modules.conf
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Search for your bluetooth devices using the CLI command 'mobile search'. Be patient with this command as
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+it will take 8 - 10 seconds to do the discovery. This requires a free adapter.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Headsets will generally have to be put into 'pairing' mode before they will show up here.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This will return something like the following :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*CLI> mobile search
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Address Name Usable Type Port
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+00:12:56:90:6E:00 LG TU500 Yes Phone 4
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+00:80:C8:35:52:78 Toaster No Headset 0
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+00:0B:9E:11:74:A5 Hello II Plus Yes Headset 1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+00:0F:86:0E:AE:42 Daves Blackberry Yes Phone 7
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This is a list of all bluetooth devices seen and whether or not they are usable with chan_mobile.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The Address field contains the 'bd address' of the device. This is like an ethernet mac address.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The Name field is whatever is configured into the device as its name.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The Usable field tells you whether or not the device supports the Bluetooth Handsfree Profile or Headset profile.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The Type field tells you whether the device is usable as a Phone line (FXO) or a headset (FXS)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The Port field is the number to put in the configuration file.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Choose which device(s) you want to use and edit /etc/asterisk/mobile.conf. There is a sample included
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+with the Asterisk-addons source under configs/mobile.conf.sample.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Be sure to configure the right bd address and port number from the search. If you want inbound
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+calls on a device to go to a specific context, add a context= line, otherwise the default will
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+be used. The 'id' of the device [bitinbrackets] can be anything you like, just make it unique.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+If you are configuring a Headset be sure to include the type=headset line, if left out it defaults
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+to phone.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The CLI command 'mobile show devices' can be used at any time to show the status of configured devices,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+and whether or not the device is capable of sending / receiving SMS via bluetooth.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+*CLI> mobile show devices
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ID Address Group Adapter Connected State SMS
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+headset 00:0B:9E:11:AE:C6 0 blue No Init No
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
d87117a |
+LGTU550 00:E0:91:7F:46:44 1 dlink No Init No
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*CLI>
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+As each phone is connected you will see a message on the Asterisk console :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ Loaded chan_mobile.so => (Bluetooth Mobile Device Channel Driver)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ -- Bluetooth Device blackberry has connected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+ -- Bluetooth Device dave has connected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+To make outbound calls, add something to you Dialplan like the following :- (modify to suit)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+; Calls via LGTU5500
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => _9X.,1,Dial(Mobile/LGTU550/${EXTEN:1},45)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => _9X.,n,Hangup
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+To use channel groups, add an entry to each phones definition in mobile.conf like group=n
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+where n is a number.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Then if you do something like Dial(Mobile/g1/123456) Asterisk will dial 123456 on the first
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+connected free phone in group 1.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Phones which do not have a specific 'group=n' will be in group 0.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+To dial out on a headset, you need to use some other mechanism, because the headset is not likely
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+to have all the needed buttons on it. res_clioriginate is good for this :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+*CLI> originate Mobile/headset extension NNNNN@context
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This will call your headset, once you answer, Asterisk will call NNNNN at context context
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Dialplan hints :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile supports 'device status' so you can do somthing like
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 1234,hint,SIP/30&Mobile/dave&Mobile/blackberry
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+MobileStatus Application :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile also registers an application named MobileStatus. You can use this in your Dialplan
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+to determine the 'state' of a device.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+For example, suppose you wanted to call dave's extension, but only if he was in the office. You could
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+test to see if his mobile phone was attached to Asterisk, if it is dial his extension, otherwise dial his
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+mobile phone.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,1,MobileStatus(dave,DAVECELL)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,2,GotoIf($["${DAVECELL}" = "1"]?3:5)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,3,Dial(ZAP/g1/0427466412,45,tT)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,4,Hangup
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,5,Dial(SIP/40,45,tT)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 40,6,Hangup
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+MobileStatus sets the value of the given variable to :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+1 = Disconnected. i.e. Device not in range of Asterisk, or turned off etc etc
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+2 = Connected and Not on a call. i.e. Free
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+3 = Connected and on a call. i.e. Busy
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+SMS Sending / Receiving
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+If Asterisk has detected your mobile phone is capable of SMS via bluetooth, you will be able to send and
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+receive SMS.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Incoming SMS's cause Asterisk to create an inbound call to the context you defined in mobile.conf or the default
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+context if you did not define one. The call will start at extension 'sms'. Two channel variables will be available,
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+SMSSRC = the number of the originator of the SMS and SMSTXT which is the text of the SMS.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This is not a voice call, so grab the values of the variables and hang the call up.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+So, to handle incoming SMS's, do something like the following in your dialplan
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[incoming-mobile]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => sms,1,Verbose(Incoming SMS from ${SMSSRC} ${SMSTXT})
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => sms,n,Hangup()
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The above will just print the message on the console.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+If you use res_jabber, you could do something like this :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[incoming-mobile]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => sms,1,JabberSend(transport,user@jabber.somewhere.com,SMS from ${SMSRC} ${SMSTXT})
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => sms,2,Hangup()
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+To send an SMS, use the application MobileSendSMS like the following :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+exten => 99,1,MobileSendSMS(dave,0427123456,Hello World)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This will send 'Hello World' via device 'dave' to '0427123456'
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+DTMF Debouncing :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+DTMF detection varies from phone to phone. There is a configuration variable that allows you to tune
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+this to your needs. e.g. in mobile.conf
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+[LGTU550]
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+address=00:12:56:90:6E:00
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+port=4
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+context=incoming-mobile
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+dtmfskip=50
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+change dtmfskip to suit your phone. The default is 200. The larger the number, the more chance of missed DTMF.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+The smaller the number the more chance of multiple digits being detected.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Debugging :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Different phone manufacturers have different interpretations of the Bluetooth Handsfree Profile Spec.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This means that not all phones work the same way, particularly in the connection setup / initialisation
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+sequence. I've tried to make chan_mobile as general as possible, but it may need modification to
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+support some phone i've never tested.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Some phones, most notably Sony Ericsson 'T' series, dont quite conform to the Bluetooth HFP spec.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+chan_mobile will detect these and adapt accordingly. The T-610 and T-630 have been tested and
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+work fine.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+If your phone doesnt behave has expected, turn on Asterisk debugging with 'core set debug 1'.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+This will log a bunch of debug messages indicating what the phone is doing, importantly the rfcomm
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+conversation between Asterisk and the phone. This can be used to sort out what your phone is doing
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+and make chan_mobile support it.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Be aware also, that just about all mobile phones behave differently. For example my LG TU500 wont dial unless
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+the phone is a the 'idle' screen. i.e. if the phone is showing a 'menu' on the display, when you dial via
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Asterisk, the call will not work. chan_mobile handles this, but there may be other phones that do
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+other things too...
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Important: Watch what your mobile phone is doing the first few times. Asterisk wont make random calls but
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+if chan_mobile fails to hangup for some reason and you get a huge bill from your telco, dont blame me ;)
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+Feedback, Support, Please can you make Mobile Phone X work... etc :-
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+as always, bugs should be reported at http://bugs.digium.com
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+email me at david.bowerman at gmail.com or dseeb_ on #asterisk & #asterisk-dev irc.
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
diff --git a/makeopts.in b/makeopts.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
index 018bc6c..039525d 100644
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
--- a/makeopts.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+++ b/makeopts.in
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
@@ -71,6 +71,9 @@ AST_FORTIFY_SOURCE=@AST_FORTIFY_SOURCE@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
ASOUND_INCLUDE=@ALSA_INCLUDE@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
ASOUND_LIB=@ALSA_LIB@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+BLUETOOTH_LIB=@BLUETOOTH_LIB@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+BLUETOOTH_INCLUDE=@BLUETOOTH_INCLUDE@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
+
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
CURL_INCLUDE=@CURL_INCLUDE@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
CURL_LIB=@CURL_LIB@
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
729de3c |
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
--
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
631fa38 |
1.6.1
|
|
![](https://seccdn.libravatar.org/avatar/66566195e0aefd0462752082439598a1555ee7566669848439acd642bf0246b5?s=16&d=retro) |
1219641 |
|