Hello Gustavo,
Le 31/01/2011 21:51, Gustavo F. Padovan a écrit :
---
plugins/bluetooth.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index dcf75e6..0b5a021 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -44,6 +44,43 @@ static GHashTable *adapter_address_hash = NULL;
static GSList *server_list = NULL;
static gint bluetooth_refcount;
+static const gchar *dun_record = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
\
+<record> \
+<attribute id=\"0x0001\">
\
+<sequence>
\
+<uuid value=\"0x1103\"/>
\
+</sequence>
\
+</attribute>
\
+
\
+<attribute id=\"0x0004\">
\
+<sequence>
\
+<sequence> \
+<uuid value=\"0x0100\"/> \
+</sequence> \
+<sequence> \
+<uuid value=\"0x0003\"/> \
+<uint8 value=\"%u\" name=\"channel\"/> \
+</sequence> \
+<sequence> \
+<uuid value=\"0x0008\"/> \
+</sequence> \
+</sequence>
\
+</attribute>
\
+
\
+<attribute id=\"0x0009\">
\
+<sequence>
\
+<sequence> \
+<uuid value=\"0x1103\"/> \
+<uint16 value=\"0x0100\" name=\"version\"/> \
+</sequence> \
+</sequence>
\
+</attribute>
\
+
\
+<attribute id=\"0x0100\">
\
+<text value=\"%s\" name=\"name\"/> \
+</attribute>
\
+</record>";
+
Why do you set the SDP record in the generic bluetooth code ?
I think this should be moved to dun_gw code.
struct server {
guint16 service;
gchar *name;
@@ -451,12 +488,40 @@ static void new_connection(GIOChannel *io, gpointer
user_data)
DBG("%p", server);
}
+static void add_record_cb(DBusPendingCall *call, gpointer user_data)
+{
+ struct server *server = user_data;
+ DBusMessage *reply = dbus_pending_call_steal_reply(call);
+ DBusError derr;
+ guint32 handle;
+
+ dbus_error_init(&derr);
+
+ if (dbus_set_error_from_message(&derr, reply)) {
+ ofono_error("Replied with an error: %s, %s",
+ derr.name, derr.message);
+ dbus_error_free(&derr);
+ server_stop(server);
+ goto done;
+ }
+
+ dbus_message_get_args(reply, NULL, DBUS_TYPE_UINT32,&handle,
+ DBUS_TYPE_INVALID);
+ server->handle = handle;
+
+ ofono_info("Registered: %s, handle: 0x%x", server->name, handle);
+
+done:
+ dbus_message_unref(reply);
+}
+
static void server_start(gpointer data, gpointer user_data)
{
struct server *server = data;
char *addr, *path = user_data;
bdaddr_t baddr;
GError *err = NULL;
+ gchar *xml;
if (server->handle != 0)
return;
@@ -478,6 +543,16 @@ static void server_start(gpointer data, gpointer user_data)
}
server->adapter = g_strdup(path);
+
+ xml = g_markup_printf_escaped(dun_record, server->channel,
+ server->name);
+
+ bluetooth_send_with_reply(path, BLUEZ_SERVICE_INTERFACE, "AddRecord",
+ add_record_cb, server, NULL, -1,
+ DBUS_TYPE_STRING,&xml,
+ DBUS_TYPE_INVALID);
+
+ g_free(xml);
}
static void adapter_properties_cb(DBusPendingCall *call, gpointer user_data)
--
Frederic Danis Open Source Technology Centre
frederic.da...@intel.com Intel Corporation
_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono