diff --git a/gobex/gobex.c b/gobex/gobex.c
index 45393fa..7736cd2 100644
--- a/gobex/gobex.c
+++ b/gobex/gobex.c
struct _GObexPacket {
guint8 opcode;
+ gboolean final;
GObexDataPolicy data_policy;
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;
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:
guint8 opcode;
ssize_t header_offset;
GObexPacket *pkt;
+ gboolean final;
if (len < 3)
return NULL;
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
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
{
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);