*/
size_t size;
+ /**
+ * HTTP/S specific overhead
+ */
+ size_t overhead;
+
/**
* Continuation function to call once the transmission buffer
* has again space available. NULL if there is no
GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg);
if (msg->transmit_cont != NULL)
{
- msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_SYSERR);
+ msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_SYSERR,
+ msg->size, msg->pos + msg->overhead);
}
GNUNET_free (msg);
msg = tmp;
char * separator = NULL;
char hash[plugin->peer_id_length+1];
int hash_length;
+ unsigned long int ctag;
/* URL parsing
* URL is valid if it is in the form [prefix with (multiple) '/'][peerid[103];tag]*/
if (debug) GNUNET_break (0);
return GNUNET_SYSERR;
}
- (*tag) = strtoul (tag_start, &tag_end, 10);
- if ((*tag) == 0)
+ ctag = strtoul (tag_start, &tag_end, 10);
+ if (ctag == 0)
{
/* tag == 0 , invalid */
if (debug) GNUNET_break (0);
return GNUNET_SYSERR;
}
- if (((*tag) == ULONG_MAX) && (ERANGE == errno))
+ if ((ctag == ULONG_MAX) && (ERANGE == errno))
{
/* out of range: > ULONG_MAX */
if (debug) GNUNET_break (0);
return GNUNET_SYSERR;
}
+ if (ctag > UINT32_MAX)
+ {
+ /* out of range: > UINT32_MAX */
+ if (debug) GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ (*tag) = (uint32_t) ctag;
if (NULL == tag_end)
{
/* no char after tag */
{
GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg);
if (NULL != msg->transmit_cont)
- msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_OK);
+ msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_OK,
+ msg->size, msg->size + msg->overhead);
GNUNET_free (msg);
}
}
}
+#define UNSIGNED_MHD_LONG_LONG unsigned MHD_LONG_LONG
+
/**
* Function that queries MHD's select sets and
* starts the task waiting for them.
struct GNUNET_NETWORK_FDSet *wws;
struct GNUNET_NETWORK_FDSet *wes;
int max;
- unsigned MHD_LONG_LONG timeout;
+ UNSIGNED_MHD_LONG_LONG timeout;
static unsigned long long last_timeout = 0;
int haveto;