OSDN Git Service

gobex: Clean up handling of the final bit
authorJohan Hedberg <johan.hedberg@intel.com>
Mon, 27 Jun 2011 07:56:16 +0000 (10:56 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 4 Dec 2012 21:21:56 +0000 (22:21 +0100)
gobex/gobex.c
gobex/gobex.h
unit/test-gobex.c

index 45393fa..7736cd2 100644 (file)
@@ -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;
index 7b736ca..2d20685 100644 (file)
@@ -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,
index 26dfe7c..d7964fb 100644 (file)
@@ -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);