size_t UNUSED_sugsz __attribute__((unused)),
uv_buf_t * buf)
{
- LOGC("ALLOC_CB");
buf->base = malloc(HTTP_MAX_HEADER_SIZE);
buf->len = buf->base ? HTTP_MAX_HEADER_SIZE-1 : 0;
}
+static void api__reset(siri_api_request_t * ar)
+{
+ /* Reset buffer in case multiple HTTP requests are used */
+ free (ar->buf);
+ ar->buf = NULL;
+ ar->len = 0;
+
+ if (ar->siridb)
+ {
+ siridb_decref(ar->siridb);
+ ar->siridb = NULL;
+ }
+
+ if (ar->origin)
+ {
+ siridb_user_decref((siridb_user_t *) ar->origin);
+ ar->origin = NULL;
+ }
+}
+
static void api__data_cb(
uv_stream_t * uvstream,
ssize_t n,
const uv_buf_t * buf)
{
- LOGC("DATA_CB");
size_t parsed;
siri_api_request_t * ar = uvstream->data;
goto done;
}
+ api__reset(ar);
+
buf->base[HTTP_MAX_HEADER_SIZE-1] = '\0';
parsed = http_parser_execute(
--n;
++nn;
}
-
ar->siridb = siridb_getn(siri.siridb_list, at, nn);
if (ar->siridb)
{
static int api__url_cb(http_parser * parser, const char * at, size_t n)
{
- LOGC("URL_CB");
siri_api_request_t * ar = parser->data;
if (api__starts_with(&at, &n, "/query/", strlen("/query/")))
static void api__connection_cb(uv_stream_t * server, int status)
{
- LOGC("CONNECTION_CB");
int rc;
siri_api_request_t * ar;
}
static int api__header_value_cb(http_parser * parser, const char * at, size_t n)
{
- LOGC("HEADER_VALUE_CB");
siri_api_request_t * ar = parser->data;
return ar->on_state ? ar->on_state(ar, at, n) : 0;
}
static int api__header_field_cb(http_parser * parser, const char * at, size_t n)
{
- LOGC("HEADER_FIELD_CB");
siri_api_request_t * ar = parser->data;
ar->on_state = API__ICMP_WITH(at, n, "content-type")
static int api__body_cb(http_parser * parser, const char * at, size_t n)
{
- LOGC("BODY_CB");
size_t offset;
siri_api_request_t * ar = parser->data;
static void api__write_cb(uv_write_t * req, int status)
{
- LOGC("WRITE_CB");
if (status)
log_error(
"error writing HTTP API response: `%s`",
static int api__query_cb(http_parser * parser)
{
- LOGC("QUERY_CB");
api__query_t q;
siri_api_request_t * ar = parser->data;
static int api__message_complete_cb(http_parser * parser)
{
- LOGC("MESSAGE_COMPLETE_CB");
siri_api_request_t * ar = parser->data;
switch(ar->request_type)
static void api__write_free_cb(uv_write_t * req, int status)
{
- LOGC("FREE_WRITE_CB");
free(req->data);
api__write_cb(req, status);
}
void * data,
size_t size)
{
- LOGC("CLOSE_RESPONSE_CB");
char header[API__HEADER_MAX_SZ];
int header_size = 0;