#include <json.h>
#include <openssl/sha.h>
-/*
-#include <openssl/bio.h>
-#include <openssl/evp.h>
-*/
#include "websock.h"
-#include "local-def.h"
-
#include "afb-req-itf.h"
#include "afb-method.h"
#include "afb-hreq.h"
struct afb_websock *afb_websock_create(struct afb_hreq *hreq)
{
+ int fd;
struct afb_websock *result;
+ fd = MHD_get_connection_info(hreq->connection,
+ MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd;
+ fd = dup(fd);
+ if (fd < 0)
+ return NULL;
+
result = malloc(sizeof * result);
if (result == NULL)
goto error;
result->connection = hreq->connection;
- result->fd = MHD_get_connection_info(hreq->connection,
- MHD_CONNECTION_INFO_CONNECTION_FD)->connect_fd;
+ result->fd = fd;
result->context = ctxClientGet(afb_hreq_context(hreq));
if (result->context == NULL)
goto error2;
error2:
free(result);
error:
+ close(fd);
return NULL;
}
goto error;
verb = &api[lenapi+1];
for (lenverb = 0 ; verb[lenverb] && verb[lenverb] != '/' ; lenverb++);
- if (!lenverb || !verb[lenverb])
+ if (!lenverb || verb[lenverb])
goto error;
/* allocates the request data */
arg.value = NULL;
}
arg.size = 0;
- arg.is_file = 0;
+ arg.path = NULL;
return arg;
}
struct json_object_iterator end = json_object_iter_end(wsreq->request);
arg.size = 0;
- arg.is_file = 0;
+ arg.path = NULL;
while(!json_object_iter_equal(&it, &end)) {
arg.name = json_object_iter_peek_name(&it);
arg.value = json_object_get_string(json_object_iter_peek_value(&it));
/* emits the reply */
message = json_object_to_json_string(reply);
websock_text(wsreq->aws->ws, message, strlen(message));
+ json_object_put(reply);
/* TODO eliminates the wsreq */
}