static void s3http_connection_on_responce_cb (struct evhttp_request *req, void *ctx) { RequestData *data = (RequestData *) ctx; struct evbuffer *inbuf; const char *buf = NULL; size_t buf_len; LOG_debug (CON_LOG, "Got HTTP response from server !"); if (!req) { LOG_err (CON_LOG, "Request failed !"); if (data->error_cb) data->error_cb (data->con, data->ctx); goto done; } // XXX: handle redirect // 200 and 204 (No Content) are ok if (evhttp_request_get_response_code (req) != 200 && evhttp_request_get_response_code (req) != 204 && evhttp_request_get_response_code (req) != 307) { LOG_err (CON_LOG, "Server returned HTTP error: %d !", evhttp_request_get_response_code (req)); LOG_debug (CON_LOG, "Error str: %s", req->response_code_line); if (data->error_cb) data->error_cb (data->con, data->ctx); goto done; } inbuf = evhttp_request_get_input_buffer (req); buf_len = evbuffer_get_length (inbuf); buf = (const char *) evbuffer_pullup (inbuf, buf_len); if (data->responce_cb) data->responce_cb (data->con, data->ctx, buf, buf_len, evhttp_request_get_input_headers (req)); else LOG_debug (CON_LOG, ">>> NO callback function !"); done: g_free (data); }