* Copyright 2016 IoT.bzh
* Author: José Bollo <jose.bollo@iot.bzh>
*
- * 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
#include "websock.h"
+#include "afb-ws-json.h"
+
#include "afb-req-itf.h"
#include "afb-method.h"
#include "afb-hreq.h"
.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
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);
};
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;
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:
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;
}
}
-
static struct afb_arg wsreq_get(struct afb_wsreq *wsreq, const char *name)
{
struct afb_arg arg;