summaryrefslogtreecommitdiffstats
path: root/audio/gstavdtpsink.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2008-12-20 18:27:30 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2008-12-20 18:27:30 +0200
commit1c7291138ae3d25d7f34803e4f354a90d012f6a1 (patch)
tree91e0bab8098a03b05fb5910860fdd8bfa8cb9be8 /audio/gstavdtpsink.c
parentc1c058b689a5cfd54b8092392b0223a7008fb63e (diff)
Fix length header values in messages
Diffstat (limited to 'audio/gstavdtpsink.c')
-rw-r--r--audio/gstavdtpsink.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/audio/gstavdtpsink.c b/audio/gstavdtpsink.c
index bf35407c..45a53b5d 100644
--- a/audio/gstavdtpsink.c
+++ b/audio/gstavdtpsink.c
@@ -786,6 +786,7 @@ static gboolean gst_avdtp_sink_get_capabilities(GstAvdtpSink *self)
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) {
@@ -931,6 +932,7 @@ static gboolean gst_avdtp_sink_stream_start(GstAvdtpSink *self)
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) {
@@ -939,6 +941,7 @@ static gboolean gst_avdtp_sink_stream_start(GstAvdtpSink *self)
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) {
@@ -1069,6 +1072,7 @@ static gboolean gst_avdtp_sink_configure(GstAvdtpSink *self,
return FALSE;
}
+ 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) {
GST_ERROR_OBJECT(self, "Error ocurred while sending "
@@ -1076,6 +1080,7 @@ static gboolean gst_avdtp_sink_configure(GstAvdtpSink *self,
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) {
@@ -1226,9 +1231,12 @@ static GIOError gst_avdtp_sink_audioservice_send(
GIOError error;
gsize written;
const char *type, *name;
+ uint16_t length;
- error = g_io_channel_write(self->server, (const gchar*) msg,
- BT_SUGGESTED_BUFFER_SIZE, &written);
+ 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)
GST_ERROR_OBJECT(self, "Error sending data to audio service:"
" %s(%d)", strerror(errno), errno);
@@ -1248,9 +1256,12 @@ static GIOError gst_avdtp_sink_audioservice_recv(
GIOError status;
gsize bytes_read;
const char *type, *name;
+ uint16_t length;
+
+ length = inmsg->length ? inmsg->length : BT_SUGGESTED_BUFFER_SIZE;
- status = g_io_channel_read(self->server, (gchar*) inmsg,
- BT_SUGGESTED_BUFFER_SIZE, &bytes_read);
+ status = g_io_channel_read(self->server, (gchar*) inmsg, length,
+ &bytes_read);
if (status != G_IO_ERROR_NONE) {
GST_ERROR_OBJECT(self, "Error receiving data from "
"audio service");