X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=src%2Fafb-websock.c;h=d92c7b0059223a26304819ecb5d8fc4aef5deb47;hb=54b2652e94cfa7840dbebcba46edd5459e7c6e86;hp=878df0425e8fe3b443077b2c37cbf8322ca14918;hpb=83ce3b29a598141f8f28afde655beb07ec78c312;p=src%2Fapp-framework-binder.git diff --git a/src/afb-websock.c b/src/afb-websock.c index 878df042..d92c7b00 100644 --- a/src/afb-websock.c +++ b/src/afb-websock.c @@ -2,8 +2,6 @@ * Copyright 2016 IoT.bzh * Author: José Bollo * - * Inspired by the work of - * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -30,6 +28,8 @@ #include "websock.h" +#include "afb-ws-json.h" + #include "afb-req-itf.h" #include "afb-method.h" #include "afb-hreq.h" @@ -170,7 +170,8 @@ static struct websock_itf aws_itf = { .on_close = (void*)aws_on_close, .on_text = (void*)aws_on_content, .on_binary = (void*)aws_on_content, - .on_continue = (void*)aws_on_content + .on_continue = (void*)aws_on_content, + .on_extension = NULL }; struct afb_wsreq @@ -186,12 +187,12 @@ struct afb_wsreq struct afb_websock { int fd; + struct afb_wsreq *requests; struct MHD_Connection *connection; + struct AFB_clientCtx *context; struct websock *ws; struct upoll *up; - struct AFB_clientCtx *context; struct json_tokener *tokener; - struct afb_wsreq *requests; }; static struct afb_arg wsreq_get(struct afb_wsreq *wsreq, const char *name); @@ -213,6 +214,15 @@ static const struct afb_req_itf wsreq_itf = { }; struct afb_websock *afb_websock_create(struct afb_hreq *hreq) +{ + return (void*)afb_ws_json_create( + dup(MHD_get_connection_info(hreq->connection,MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd), + afb_hreq_context(hreq), + (void*)MHD_resume_connection, + hreq->connection); +} + +struct afb_websock *_afb_websock_create(struct afb_hreq *hreq) { int fd; struct afb_websock *result; @@ -227,31 +237,34 @@ struct afb_websock *afb_websock_create(struct afb_hreq *hreq) if (result == NULL) goto error; - result->connection = hreq->connection; result->fd = fd; + result->requests = NULL; + result->connection = hreq->connection; result->context = ctxClientGet(afb_hreq_context(hreq)); if (result->context == NULL) goto error2; result->tokener = json_tokener_new(); if (result->tokener == NULL) - goto error2; + goto error3; - result->ws = websock_create(&aws_itf, result); + result->ws = websock_create_v13(&aws_itf, result); if (result->ws == NULL) - goto error3; + goto error4; result->up = upoll_open(result->fd, result); if (result->up == NULL) - goto error4; + goto error5; upoll_on_readable(result->up, (void*)aws_on_readable); upoll_on_hangup(result->up, (void*)aws_disconnect); return result; -error4: +error5: websock_destroy(result->ws); -error3: +error4: json_tokener_free(result->tokener); +error3: + ctxClientPut(result->context); error2: free(result); error: @@ -301,7 +314,7 @@ static void aws_on_readable(struct afb_websock *ws) static int aws_handle_json(struct afb_websock *aws, struct json_object *obj) { struct afb_req r; - int count, num, rc; + int count, num; struct json_object *type, *id, *name, *req, *token; struct afb_wsreq *wsreq; const char *api, *verb; @@ -403,7 +416,6 @@ static void aws_on_content(struct afb_websock *ws, int last, size_t size) } } - static struct afb_arg wsreq_get(struct afb_wsreq *wsreq, const char *name) { struct afb_arg arg;