From 22c146eb0676407fd06906f2453a63076f7c9bdd Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 27 Jun 2011 10:56:16 +0300 Subject: [PATCH] gobex: Clean up handling of the final bit --- gobex/gobex.c | 12 +++++++++--- gobex/gobex.h | 2 +- unit/test-gobex.c | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gobex/gobex.c b/gobex/gobex.c index 45393fac5..7736cd25d 100644 --- a/gobex/gobex.c +++ b/gobex/gobex.c @@ -52,6 +52,7 @@ struct _GObexHeader { struct _GObexPacket { guint8 opcode; + gboolean final; GObexDataPolicy data_policy; @@ -397,13 +398,14 @@ gboolean g_obex_packet_set_data(GObexPacket *pkt, const void *data, size_t len, return TRUE; } -GObexPacket *g_obex_packet_new(guint8 opcode) +GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final) { GObexPacket *pkt; pkt = g_new0(GObexPacket, 1); pkt->opcode = opcode; + pkt->final = final; pkt->data_policy = G_OBEX_DATA_COPY; @@ -428,7 +430,7 @@ void g_obex_packet_free(GObexPacket *pkt) static ssize_t get_header_offset(guint8 opcode) { - switch (opcode & ~G_OBEX_FINAL) { + switch (opcode) { case G_OBEX_OP_CONNECT: return sizeof(struct connect_data); case G_OBEX_OP_SETPATH: @@ -474,6 +476,7 @@ GObexPacket *g_obex_packet_decode(const void *data, size_t len, guint8 opcode; ssize_t header_offset; GObexPacket *pkt; + gboolean final; if (len < 3) return NULL; @@ -485,11 +488,14 @@ GObexPacket *g_obex_packet_decode(const void *data, size_t len, if (packet_len < len) return NULL; + final = (opcode & G_OBEX_FINAL) ? TRUE : FALSE; + opcode &= ~G_OBEX_FINAL; + header_offset = get_header_offset(opcode); if (header_offset < 0) return NULL; - pkt = g_obex_packet_new(opcode); + pkt = g_obex_packet_new(opcode, final); if (header_offset == 0) goto headers; diff --git a/gobex/gobex.h b/gobex/gobex.h index 7b736cae5..2d206856c 100644 --- a/gobex/gobex.h +++ b/gobex/gobex.h @@ -86,7 +86,7 @@ void g_obex_header_free(GObexHeader *header); gboolean g_obex_packet_add_header(GObexPacket *req, GObexHeader *header); gboolean g_obex_packet_set_data(GObexPacket *pkt, const void *data, size_t len, GObexDataPolicy data_policy); -GObexPacket *g_obex_packet_new(guint8 opcode); +GObexPacket *g_obex_packet_new(guint8 opcode, gboolean final); void g_obex_packet_free(GObexPacket *req); GObexPacket *g_obex_packet_decode(const void *data, size_t len, diff --git a/unit/test-gobex.c b/unit/test-gobex.c index 26dfe7ccc..d7964fb10 100644 --- a/unit/test-gobex.c +++ b/unit/test-gobex.c @@ -339,7 +339,7 @@ static void test_pkt(void) { GObexPacket *pkt; - pkt = g_obex_packet_new(G_OBEX_OP_PUT); + pkt = g_obex_packet_new(G_OBEX_OP_PUT, TRUE); g_assert(pkt != NULL); -- 2.47.3