Diff between b8d9f56dd841efa7dc3489ff6404a5157efc01ef and 22c146eb0676407fd06906f2453a63076f7c9bdd

Changed Files

File Additions Deletions Status
gobex/gobex.c +9 -3 modified
gobex/gobex.h +1 -1 modified
unit/test-gobex.c +1 -1 modified

Full Patch

diff --git a/gobex/gobex.c b/gobex/gobex.c
index 45393fa..7736cd2 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 7b736ca..2d20685 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 26dfe7c..d7964fb 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);