improves websockets
[src/app-framework-binder.git] / src / afb-websock.c
index e8f596c..1f80071 100644 (file)
@@ -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
@@ -235,23 +236,25 @@ struct afb_websock *afb_websock_create(struct afb_hreq *hreq)
 
        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 +304,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;
@@ -367,9 +370,7 @@ static int aws_handle_json(struct afb_websock *aws, struct json_object *obj)
 
        r.data = wsreq;
        r.itf = &wsreq_itf;
-       rc = afb_apis_handle(r, aws->context, api, lenapi, verb, lenverb);
-       if (rc == 0)
-               wsreq_fail(wsreq, "ail", "api not found");
+       afb_apis_call(r, aws->context, api, lenapi, verb, lenverb);
        return 1;
 
 error:
@@ -405,7 +406,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;
@@ -414,11 +414,12 @@ static struct afb_arg wsreq_get(struct afb_wsreq *wsreq, const char *name)
        if (json_object_object_get_ex(wsreq->request, name, &value)) {
                arg.name = name;
                arg.value = json_object_get_string(value);
+               arg.size = strlen(arg.value);
        } else {
                arg.name = NULL;
                arg.value = NULL;
+               arg.size = 0;
        }
-       arg.size = 0;
        arg.path = NULL;
        return arg;
 }