diff --git a/gobex/gobex.c b/gobex/gobex.c
index aa68d0a..fcf662d 100644
--- a/gobex/gobex.c
+++ b/gobex/gobex.c
struct _GObexHeader {
uint8_t id;
gboolean extdata;
- size_t vlen;
+ size_t vlen; /* Length of value */
+ size_t hlen; /* Length of full encoded header */
union {
char *string; /* UTF-8 converted from UTF-16 */
uint8_t *data; /* Own buffer */
struct _GObexRequest {
uint8_t opcode;
+ size_t hlen; /* Length of all encoded headers */
GSList *headers;
};
goto failed;
header->vlen = (size_t) str_len;
+ header->hlen = hdr_len;
*parsed = hdr_len;
goto failed;
header->vlen = hdr_len - 3;
+ header->hlen = hdr_len;
if (copy) {
header->v.data = g_malloc(hdr_len);
break;
case G_OBEX_HDR_TYPE_UINT8:
header->vlen = 1;
+ header->hlen = 2;
header->v.u8 = buf[1];
*parsed = 2;
break;
if (len < 5)
goto failed;
header->vlen = 4;
+ header->hlen = 5;
memcpy(&header->v.u32, &buf[1], 4);
header->v.u32 = be32toh(header->v.u32);
*parsed = 5;
gboolean g_obex_request_add_header(GObexRequest *req, GObexHeader *header)
{
req->headers = g_slist_append(req->headers, header);
+ req->hlen += header->hlen;
return TRUE;
}