X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hreq.c;h=d0adda6eb9bcdeae287696ba6c072eb81eedf090;hb=bd68881a7977d2fe63d4ca85b757ed9c127ec21d;hp=c90b23725a05e042935e6d1c4ea2aa8f9321954b;hpb=b161af0475e1b0864ab7f57390a63f77698d98e1;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hreq.c b/src/afb-hreq.c index c90b2372..d0adda6e 100644 --- a/src/afb-hreq.c +++ b/src/afb-hreq.c @@ -68,7 +68,7 @@ static struct afb_arg req_get(struct afb_hreq *hreq, const char *name); static void req_fail(struct afb_hreq *hreq, const char *status, const char *info); static void req_success(struct afb_hreq *hreq, json_object *obj, const char *info); static const char *req_raw(struct afb_hreq *hreq, size_t *size); -static void req_send(struct afb_hreq *hreq, char *buffer, size_t size); +static void req_send(struct afb_hreq *hreq, const char *buffer, size_t size); static int req_session_create(struct afb_hreq *hreq); static int req_session_check(struct afb_hreq *hreq, int refresh); static void req_session_close(struct afb_hreq *hreq); @@ -152,6 +152,10 @@ static void afb_hreq_reply_v(struct afb_hreq *hreq, unsigned status, struct MHD_ { char *cookie; const char *k, *v; + + if (hreq->replied != 0) + return; + k = va_arg(args, const char *); while (k != NULL) { v = va_arg(args, const char *); @@ -164,6 +168,14 @@ static void afb_hreq_reply_v(struct afb_hreq *hreq, unsigned status, struct MHD_ } MHD_queue_response(hreq->connection, status, response); MHD_destroy_response(response); + + hreq->replied = 1; + if (hreq->suspended != 0) { + extern void run_micro_httpd(struct afb_hsrv *hsrv); + MHD_resume_connection (hreq->connection); + hreq->suspended = 0; + run_micro_httpd(hreq->hsrv); + } } void afb_hreq_reply(struct afb_hreq *hreq, unsigned status, struct MHD_Response *response, ...) @@ -182,19 +194,19 @@ void afb_hreq_reply_empty(struct afb_hreq *hreq, unsigned status, ...) va_end(args); } -void afb_hreq_reply_static(struct afb_hreq *hreq, unsigned status, size_t size, char *buffer, ...) +void afb_hreq_reply_static(struct afb_hreq *hreq, unsigned status, size_t size, const char *buffer, ...) { va_list args; va_start(args, buffer); - afb_hreq_reply_v(hreq, status, MHD_create_response_from_buffer((unsigned)size, buffer, MHD_RESPMEM_PERSISTENT), args); + afb_hreq_reply_v(hreq, status, MHD_create_response_from_buffer((unsigned)size, (char*)buffer, MHD_RESPMEM_PERSISTENT), args); va_end(args); } -void afb_hreq_reply_copy(struct afb_hreq *hreq, unsigned status, size_t size, char *buffer, ...) +void afb_hreq_reply_copy(struct afb_hreq *hreq, unsigned status, size_t size, const char *buffer, ...) { va_list args; va_start(args, buffer); - afb_hreq_reply_v(hreq, status, MHD_create_response_from_buffer((unsigned)size, buffer, MHD_RESPMEM_MUST_COPY), args); + afb_hreq_reply_v(hreq, status, MHD_create_response_from_buffer((unsigned)size, (char*)buffer, MHD_RESPMEM_MUST_COPY), args); va_end(args); } @@ -649,9 +661,9 @@ static const char *req_raw(struct afb_hreq *hreq, size_t *size) return result; } -static void req_send(struct afb_hreq *hreq, char *buffer, size_t size) +static void req_send(struct afb_hreq *hreq, const char *buffer, size_t size) { - afb_hreq_reply_free(hreq, MHD_HTTP_OK, size, buffer, NULL); + afb_hreq_reply_copy(hreq, MHD_HTTP_OK, size, buffer, NULL); } static ssize_t send_json_cb(json_object *obj, uint64_t pos, char *buf, size_t max)