X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hswitch.c;h=34eafd5bdef1a47724bdf6090c43ab553721324a;hb=090379fdaf6ed1860dcff21424135ad71ead0cd2;hp=8dee80b3defad46182b57cdf98206d58739c3e48;hpb=06382af9092babedbf56aa1c00b3bd7cb0b86cda;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hswitch.c b/src/afb-hswitch.c index 8dee80b3..34eafd5b 100644 --- a/src/afb-hswitch.c +++ b/src/afb-hswitch.c @@ -1,5 +1,5 @@ -/* - * Copyright (C) 2015, 2016 "IoT.bzh" +/* + * Copyright (C) 2015, 2016, 2017 "IoT.bzh" * Author "Fulup Ar Foll" * Author José Bollo * @@ -26,14 +26,15 @@ #include #include "afb-context.h" #include "afb-hreq.h" -#include "afb-apis.h" -#include "session.h" +#include "afb-apiset.h" +#include "afb-session.h" #include "afb-websock.h" int afb_hswitch_apis(struct afb_hreq *hreq, void *data) { const char *api, *verb; size_t lenapi, lenverb; + struct afb_apiset *apiset = data; api = &hreq->tail[strspn(hreq->tail, "/")]; lenapi = strcspn(api, "/"); @@ -44,10 +45,7 @@ int afb_hswitch_apis(struct afb_hreq *hreq, void *data) if (!(*api && *verb && lenapi && lenverb)) return 0; - if (afb_hreq_init_context(hreq) < 0) - afb_hreq_reply_error(hreq, MHD_HTTP_INTERNAL_SERVER_ERROR); - else - afb_apis_call(afb_hreq_to_req(hreq), &hreq->context, api, lenapi, verb, lenverb); + afb_hreq_call(hreq, apiset, api, lenapi, verb, lenverb); return 1; } @@ -73,11 +71,14 @@ int afb_hswitch_one_page_api_redirect(struct afb_hreq *hreq, void *data) url[plen++] = '#'; url[plen++] = '!'; memcpy(&url[plen], &hreq->tail[1], hreq->lentail); - return afb_hreq_redirect_to(hreq, url); + afb_hreq_redirect_to(hreq, url, 1); + return 1; } int afb_hswitch_websocket_switch(struct afb_hreq *hreq, void *data) { + struct afb_apiset *apiset = data; + if (hreq->lentail != 0) return 0; @@ -86,7 +87,12 @@ int afb_hswitch_websocket_switch(struct afb_hreq *hreq, void *data) return 1; } - return afb_websock_check_upgrade(hreq); + if (!hreq->xreq.context.validated) { + afb_hreq_reply_error(hreq, MHD_HTTP_UNAUTHORIZED); + return 1; + } + + return afb_websock_check_upgrade(hreq, apiset); }