aboutsummaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz-von@nokia.com>2011-01-19 10:04:49 +0200
committerLuiz Augusto von Dentz <luiz.dentz-von@nokia.com>2011-01-19 13:52:53 +0200
commit4aecf0a27cfdd08d84a1c61271f5c59da3ae370a (patch)
tree379c0789960d2778b291ed9af370b58727c3b27d /audio
parenteffe770cd43cf53fa5842291941dbfc82beab645 (diff)
downloadbluez-4aecf0a27cfdd08d84a1c61271f5c59da3ae370a.tar.gz
Fix use of deprecated glib on audio plugin
Diffstat (limited to 'audio')
-rw-r--r--audio/avdtp.c10
-rw-r--r--audio/gstavdtpsink.c162
-rw-r--r--audio/headset.c13
-rw-r--r--audio/unix.c2
4 files changed, 97 insertions, 90 deletions
diff --git a/audio/avdtp.c b/audio/avdtp.c
index fdac1e37..88e3e8af 100644
--- a/audio/avdtp.c
+++ b/audio/avdtp.c
@@ -2091,7 +2091,8 @@ static gboolean session_cb(GIOChannel *chan, GIOCondition cond,
{
struct avdtp *session = data;
struct avdtp_common_header *header;
- gsize size;
+ ssize_t size;
+ int fd;
DBG("");
@@ -2103,13 +2104,14 @@ static gboolean session_cb(GIOChannel *chan, GIOCondition cond,
if (cond & (G_IO_HUP | G_IO_ERR))
goto failed;
- if (g_io_channel_read(chan, session->buf, session->imtu, &size)
- != G_IO_ERROR_NONE) {
+ fd = g_io_channel_unix_get_fd(chan);
+ size = read(fd, session->buf, session->imtu);
+ if (size < 0) {
error("IO Channel read error");
goto failed;
}
- if (size < sizeof(struct avdtp_common_header)) {
+ if ((size_t) size < sizeof(struct avdtp_common_header)) {
error("Received too small packet (%zu bytes)", size);
goto failed;
}
diff --git a/audio/gstavdtpsink.c b/audio/gstavdtpsink.c
index 95c48117..48fa24d2 100644
--- a/audio/gstavdtpsink.c
+++ b/audio/gstavdtpsink.c
@@ -122,12 +122,11 @@ static GstStaticPadTemplate avdtp_sink_factory =
"encoding-name = (string) \"MPA\""
));
-static GIOError gst_avdtp_sink_audioservice_send(GstAvdtpSink *self,
+static int gst_avdtp_sink_audioservice_send(GstAvdtpSink *self,
const bt_audio_msg_header_t *msg);
-static GIOError gst_avdtp_sink_audioservice_expect(
- GstAvdtpSink *self,
- bt_audio_msg_header_t *outmsg,
- guint8 expected_name);
+static int gst_avdtp_sink_audioservice_expect(GstAvdtpSink *self,
+ bt_audio_msg_header_t *outmsg,
+ guint8 expected_name);
static void gst_avdtp_sink_base_init(gpointer g_class)
@@ -287,6 +286,7 @@ static gint gst_avdtp_sink_bluetooth_recvmsg_fd(GstAvdtpSink *sink)
}
sink->stream = g_io_channel_unix_new(ret);
+ g_io_channel_set_encoding(sink->stream, NULL, NULL);
GST_DEBUG_OBJECT(sink, "stream_fd=%d", ret);
return 0;
@@ -413,11 +413,10 @@ static gboolean gst_avdtp_sink_conf_recv_stream_fd(
{
struct bluetooth_data *data = self->data;
gint ret;
- GIOError err;
GError *gerr = NULL;
GIOStatus status;
GIOFlags flags;
- gsize read;
+ int fd;
/* Proceed if stream was already acquired */
if (self->stream != NULL)
@@ -450,14 +449,14 @@ proceed:
"socket to nonblock");
}
+ fd = g_io_channel_unix_get_fd(self->stream);
+
/* It is possible there is some outstanding
data in the pipe - we have to empty it */
GST_LOG_OBJECT(self, "emptying stream pipe");
while (1) {
- err = g_io_channel_read(self->stream, data->buffer,
- (gsize) data->link_mtu,
- &read);
- if (err != G_IO_ERROR_NONE || read <= 0)
+ ssize_t bread = read(fd, data->buffer, data->link_mtu);
+ if (bread <= 0)
break;
}
@@ -1143,7 +1142,7 @@ static gboolean gst_avdtp_sink_get_capabilities(GstAvdtpSink *self)
gchar *buf[BT_SUGGESTED_BUFFER_SIZE];
struct bt_get_capabilities_req *req = (void *) buf;
struct bt_get_capabilities_rsp *rsp = (void *) buf;
- GIOError io_error;
+ int err;
memset(req, 0, BT_SUGGESTED_BUFFER_SIZE);
@@ -1157,16 +1156,16 @@ static gboolean gst_avdtp_sink_get_capabilities(GstAvdtpSink *self)
if (self->autoconnect)
req->flags |= BT_FLAG_AUTOCONNECT;
- io_error = gst_avdtp_sink_audioservice_send(self, &req->h);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_send(self, &req->h);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while asking device caps");
return FALSE;
}
rsp->h.length = 0;
- io_error = gst_avdtp_sink_audioservice_expect(self,
- &rsp->h, BT_GET_CAPABILITIES);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_expect(self,
+ &rsp->h, BT_GET_CAPABILITIES);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while getting device caps");
return FALSE;
}
@@ -1355,6 +1354,7 @@ static gboolean gst_avdtp_sink_transport_acquire(GstAvdtpSink *self)
dbus_message_unref(reply);
self->stream = g_io_channel_unix_new(fd);
+ g_io_channel_set_encoding(self->stream, NULL, NULL);
g_io_channel_set_close_on_unref(self->stream, TRUE);
GST_DEBUG_OBJECT(self, "stream_fd=%d", fd);
@@ -1461,6 +1461,7 @@ static gboolean gst_avdtp_sink_start(GstBaseSink *basesink)
}
self->server = g_io_channel_unix_new(sk);
+ g_io_channel_set_encoding(self->server, NULL, NULL);
self->watch_id = g_io_add_watch(self->server, G_IO_HUP | G_IO_ERR |
G_IO_NVAL, server_callback, self);
@@ -1483,7 +1484,7 @@ static gboolean gst_avdtp_sink_stream_start(GstAvdtpSink *self)
struct bt_start_stream_req *req = (void *) buf;
struct bt_start_stream_rsp *rsp = (void *) buf;
struct bt_new_stream_ind *ind = (void *) buf;
- GIOError io_error;
+ int err;
if (self->transport != NULL)
return gst_avdtp_sink_conf_recv_stream_fd(self);
@@ -1493,26 +1494,26 @@ static gboolean gst_avdtp_sink_stream_start(GstAvdtpSink *self)
req->h.name = BT_START_STREAM;
req->h.length = sizeof(*req);
- io_error = gst_avdtp_sink_audioservice_send(self, &req->h);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_send(self, &req->h);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error ocurred while sending "
"start packet");
return FALSE;
}
rsp->h.length = sizeof(*rsp);
- io_error = gst_avdtp_sink_audioservice_expect(self,
- &rsp->h, BT_START_STREAM);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_expect(self, &rsp->h,
+ BT_START_STREAM);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while stream "
"start confirmation");
return FALSE;
}
ind->h.length = sizeof(*ind);
- io_error = gst_avdtp_sink_audioservice_expect(self, &ind->h,
- BT_NEW_STREAM);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_expect(self, &ind->h,
+ BT_NEW_STREAM);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while receiving "
"stream filedescriptor");
return FALSE;
@@ -1610,10 +1611,10 @@ static gboolean gst_avdtp_sink_configure(GstAvdtpSink *self,
struct bt_set_configuration_req *req = (void *) buf;
struct bt_set_configuration_rsp *rsp = (void *) buf;
gboolean ret;
- GIOError io_error;
gchar *temp;
GstStructure *structure;
codec_capabilities_t *codec = NULL;
+ int err;
temp = gst_caps_to_string(caps);
GST_DEBUG_OBJECT(self, "configuring device with caps: %s", temp);
@@ -1645,17 +1646,17 @@ static gboolean gst_avdtp_sink_configure(GstAvdtpSink *self,
open_req->seid = codec->seid;
open_req->lock = BT_WRITE_LOCK;
- io_error = gst_avdtp_sink_audioservice_send(self, &open_req->h);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_send(self, &open_req->h);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error ocurred while sending "
"open packet");
return FALSE;
}
open_rsp->h.length = sizeof(*open_rsp);
- io_error = gst_avdtp_sink_audioservice_expect(self,
- &open_rsp->h, BT_OPEN);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_expect(self, &open_rsp->h,
+ BT_OPEN);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while receiving device "
"confirmation");
return FALSE;
@@ -1681,17 +1682,17 @@ static gboolean gst_avdtp_sink_configure(GstAvdtpSink *self,
}
req->h.length += req->codec.length - sizeof(req->codec);
- io_error = gst_avdtp_sink_audioservice_send(self, &req->h);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_send(self, &req->h);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error ocurred while sending "
"configurarion packet");
return FALSE;
}
rsp->h.length = sizeof(*rsp);
- io_error = gst_avdtp_sink_audioservice_expect(self,
- &rsp->h, BT_SET_CONFIGURATION);
- if (io_error != G_IO_ERROR_NONE) {
+ err = gst_avdtp_sink_audioservice_expect(self, &rsp->h,
+ BT_SET_CONFIGURATION);
+ if (err < 0) {
GST_ERROR_OBJECT(self, "Error while receiving device "
"confirmation");
return FALSE;
@@ -1724,16 +1725,15 @@ static GstFlowReturn gst_avdtp_sink_render(GstBaseSink *basesink,
GstBuffer *buffer)
{
GstAvdtpSink *self = GST_AVDTP_SINK(basesink);
- gsize ret;
- GIOError err;
+ ssize_t ret;
+ int fd;
- err = g_io_channel_write(self->stream,
- (gchar *) GST_BUFFER_DATA(buffer),
- (gsize) (GST_BUFFER_SIZE(buffer)), &ret);
+ fd = g_io_channel_unix_get_fd(self->stream);
- if (err != G_IO_ERROR_NONE) {
- GST_ERROR_OBJECT(self, "Error while writting to socket: %d %s",
- errno, strerror(errno));
+ ret = write(fd, GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE(buffer));
+ if (ret < 0) {
+ GST_ERROR_OBJECT(self, "Error while writting to socket: %s",
+ strerror(errno));
return GST_FLOW_ERROR;
}
@@ -1840,53 +1840,55 @@ static void gst_avdtp_sink_init(GstAvdtpSink *self,
*/
}
-static GIOError gst_avdtp_sink_audioservice_send(
- GstAvdtpSink *self,
+static int gst_avdtp_sink_audioservice_send(GstAvdtpSink *self,
const bt_audio_msg_header_t *msg)
{
- GIOError error;
- gsize written;
+ ssize_t written;
const char *type, *name;
uint16_t length;
+ int fd;
length = msg->length ? msg->length : BT_SUGGESTED_BUFFER_SIZE;
- error = g_io_channel_write(self->server, (const gchar *) msg, length,
- &written);
- if (error != G_IO_ERROR_NONE)
+ fd = g_io_channel_unix_get_fd(self->server);
+
+ written = write(fd, msg, length);
+ if (written < 0) {
GST_ERROR_OBJECT(self, "Error sending data to audio service:"
- " %s(%d)", strerror(errno), errno);
+ " %s", strerror(errno));
+ return -errno;
+ }
type = bt_audio_strtype(msg->type);
name = bt_audio_strname(msg->name);
GST_DEBUG_OBJECT(self, "sent: %s -> %s", type, name);
- return error;
+ return 0;
}
-static GIOError gst_avdtp_sink_audioservice_recv(
- GstAvdtpSink *self,
- bt_audio_msg_header_t *inmsg)
+static int gst_avdtp_sink_audioservice_recv(GstAvdtpSink *self,
+ bt_audio_msg_header_t *inmsg)
{
- GIOError status;
- gsize bytes_read;
+ ssize_t bytes_read;
const char *type, *name;
uint16_t length;
+ int fd, err;
length = inmsg->length ? inmsg->length : BT_SUGGESTED_BUFFER_SIZE;
- status = g_io_channel_read(self->server, (gchar *) inmsg, length,
- &bytes_read);
- if (status != G_IO_ERROR_NONE) {
+ fd = g_io_channel_unix_get_fd(self->server);
+
+ bytes_read = read(fd, inmsg, length);
+ if (bytes_read < 0) {
GST_ERROR_OBJECT(self, "Error receiving data from "
- "audio service");
- return status;
+ "audio service: %s", strerror(errno));
+ return -errno;
}
type = bt_audio_strtype(inmsg->type);
if (!type) {
- status = G_IO_ERROR_INVAL;
+ err = -EINVAL;
GST_ERROR_OBJECT(self, "Bogus message type %d "
"received from audio service",
inmsg->type);
@@ -1894,41 +1896,41 @@ static GIOError gst_avdtp_sink_audioservice_recv(
name = bt_audio_strname(inmsg->name);
if (!name) {
- status = G_IO_ERROR_INVAL;
+ err = -EINVAL;
GST_ERROR_OBJECT(self, "Bogus message name %d "
"received from audio service",
inmsg->name);
}
if (inmsg->type == BT_ERROR) {
- bt_audio_error_t *err = (void *) inmsg;
- status = G_IO_ERROR_INVAL;
+ bt_audio_error_t *msg = (void *) inmsg;
+ err = -EINVAL;
GST_ERROR_OBJECT(self, "%s failed : "
"%s(%d)",
name,
- strerror(err->posix_errno),
- err->posix_errno);
+ strerror(msg->posix_errno),
+ msg->posix_errno);
}
GST_DEBUG_OBJECT(self, "received: %s <- %s", type, name);
- return status;
+ return err;
}
-static GIOError gst_avdtp_sink_audioservice_expect(
- GstAvdtpSink *self, bt_audio_msg_header_t *outmsg,
- guint8 expected_name)
+static int gst_avdtp_sink_audioservice_expect(GstAvdtpSink *self,
+ bt_audio_msg_header_t *outmsg,
+ guint8 expected_name)
{
- GIOError status;
+ int err;
- status = gst_avdtp_sink_audioservice_recv(self, outmsg);
- if (status != G_IO_ERROR_NONE)
- return status;
+ err = gst_avdtp_sink_audioservice_recv(self, outmsg);
+ if (err < 0)
+ return err;
if (outmsg->name != expected_name)
- status = G_IO_ERROR_INVAL;
+ return -EINVAL;
- return status;
+ return 0;
}
gboolean gst_avdtp_sink_plugin_init(GstPlugin *plugin)
diff --git a/audio/headset.c b/audio/headset.c
index 53a594dd..120ab23c 100644
--- a/audio/headset.c
+++ b/audio/headset.c
@@ -1235,8 +1235,9 @@ static gboolean rfcomm_io_cb(GIOChannel *chan, GIOCondition cond,
struct headset *hs;
struct headset_slc *slc;
unsigned char buf[BUF_SIZE];
- gsize bytes_read = 0;
- gsize free_space;
+ ssize_t bytes_read;
+ size_t free_space;
+ int fd;
if (cond & G_IO_NVAL)
return FALSE;
@@ -1249,14 +1250,16 @@ static gboolean rfcomm_io_cb(GIOChannel *chan, GIOCondition cond,
goto failed;
}
- if (g_io_channel_read(chan, (gchar *) buf, sizeof(buf) - 1,
- &bytes_read) != G_IO_ERROR_NONE)
+ fd = g_io_channel_unix_get_fd(chan);
+
+ bytes_read = read(fd, buf, sizeof(buf) - 1);
+ if (bytes_read < 0)
return TRUE;
free_space = sizeof(slc->buf) - slc->data_start -
slc->data_length - 1;
- if (free_space < bytes_read) {
+ if (free_space < (size_t) bytes_read) {
/* Very likely that the HS is sending us garbage so
* just ignore the data and disconnect */
error("Too much data to fit incomming buffer");
diff --git a/audio/unix.c b/audio/unix.c
index 76c68a8b..a4b92f42 100644
--- a/audio/unix.c
+++ b/audio/unix.c
@@ -1791,7 +1791,7 @@ static gboolean server_cb(GIOChannel *chan, GIOCondition cond, gpointer data)
return FALSE;
if (cond & (G_IO_HUP | G_IO_ERR)) {
- g_io_channel_close(chan);
+ g_io_channel_shutdown(chan, TRUE, NULL);
return FALSE;
}