Merge branch 'master' of https://github.com/iotbzh/afb-daemon
[src/app-framework-binder.git] / src / afb-hsrv.c
index f514c97..743315c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016 IoT.bzh
+ * Copyright (C) 2016 "IoT.bzh"
  * Author: José Bollo <jose.bollo@iot.bzh>
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,6 +30,7 @@
 #include <systemd/sd-event.h>
 
 #include "afb-method.h"
+#include "afb-context.h"
 #include "afb-hreq.h"
 #include "afb-hsrv.h"
 #include "afb-req-itf.h"
@@ -130,6 +131,7 @@ static int access_handler(
                }
 
                /* init the request */
+               hreq->refcount = 1;
                hreq->hsrv = hsrv;
                hreq->cacheTimeout = hsrv->cache_to;
                hreq->reqid = ++global_reqids;
@@ -154,7 +156,9 @@ static int access_handler(
                                if (hreq->postform == NULL)
                                        afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR);
                                return MHD_YES;
-                       } else if (strcasestr(type, JSON_CONTENT) == NULL) {
+                       } else if (strcasestr(type, JSON_CONTENT) != NULL) {
+                               return MHD_YES;
+                        } else {
                                afb_hreq_reply_error(hreq, MHD_HTTP_UNSUPPORTED_MEDIA_TYPE);
                                return MHD_YES;
                        }
@@ -228,7 +232,7 @@ static void end_handler(void *cls, struct MHD_Connection *connection, void **rec
        hreq = *recordreq;
        if (hreq->upgrade)
                MHD_suspend_connection (connection);
-       afb_hreq_free(hreq);
+       afb_hreq_unref(hreq);
 }
 
 void run_micro_httpd(struct afb_hsrv *hsrv)
@@ -386,14 +390,14 @@ int afb_hsrv_start(struct afb_hsrv *hsrv, uint16_t port, unsigned int connection
                MHD_OPTION_END);        /* options-end */
 
        if (httpd == NULL) {
-               fprintf(stderr, "Error: httpStart invalid httpd port: %d", (int)port);
+               ERROR("httpStart invalid httpd port: %d", (int)port);
                return 0;
        }
 
        info = MHD_get_daemon_info(httpd, MHD_DAEMON_INFO_EPOLL_FD_LINUX_ONLY);
        if (info == NULL) {
                MHD_stop_daemon(httpd);
-               fprintf(stderr, "Error: httpStart no pollfd");
+               ERROR("httpStart no pollfd");
                return 0;
        }
 
@@ -401,7 +405,7 @@ int afb_hsrv_start(struct afb_hsrv *hsrv, uint16_t port, unsigned int connection
        if (rc < 0) {
                MHD_stop_daemon(httpd);
                errno = -rc;
-               fprintf(stderr, "Error: connection to events for httpd failed");
+               ERROR("connection to events for httpd failed");
                return 0;
        }