You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.3 KiB

#include "wsfsp/client.h"
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <libwebsockets.h>
#include "wsfsp/provider.h"
#include "wsfsp/client_protocol_intern.h"
#define WSFSP_DISABLE_LWS_LOG 0
#define WSFSP_CLIENT_PROTOCOL_COUNT 2
#define WSFSP_CLIENT_TIMEOUT (1 * 1000)
struct wsfsp_client
{
volatile bool is_running;
struct wsfsp_provider provider;
struct wsfsp_client_protocol protocol;
struct lws_context_creation_info info;
struct lws_protocols protocols[WSFSP_CLIENT_PROTOCOL_COUNT];
struct lws_context * context;
};
struct wsfsp_client * wsfsp_client_create(
struct wsfsp_provider * provider,
void * user_data)
{
lws_set_log_level(WSFSP_DISABLE_LWS_LOG, NULL);
struct wsfsp_client * client = malloc(sizeof(struct wsfsp_client));
if (NULL != client)
{
client->is_running = true;
wsfsp_client_protocol_init(&client->protocol, provider, user_data);
memset(client->protocols, 0, sizeof(struct lws_protocols) * WSFSP_CLIENT_PROTOCOL_COUNT);
client->protocols[0].name = "fs-provider";
wsfsp_client_protocol_init_lws(&client->protocol, &client->protocols[0]);
memset(&client->info, 0, sizeof(struct lws_context_creation_info));
client->info.port = CONTEXT_PORT_NO_LISTEN;
client->info.protocols = client->protocols;
client->info.uid = -1;
client->info.gid = -1;
client->context = lws_create_context(&client->info);
}
return client;
}
void wsfsp_client_dispose(
struct wsfsp_client * client)
{
lws_context_destroy(client->context);
wsfsp_client_protocol_cleanup(&client->protocol);
free(client);
}
void wsfsp_client_connect(
struct wsfsp_client * client,
char const * url)
{
(void) client;
(void) url;
// ToDo: implement me
}
void wsfsp_client_disconnect(
struct wsfsp_client * client)
{
(void) client;
// ToDo: implement me
}
void wsfsp_client_settimeout(
struct wsfsp_client * client,
unsigned int timepoint)
{
(void) client;
(void) timepoint;
// ToDo: implement me
}
void wsfsp_client_run(
struct wsfsp_client * client)
{
while (client->is_running)
{
lws_service(client->context, WSFSP_CLIENT_TIMEOUT);
}
}
void wsfsp_client_shutdown(
struct wsfsp_client * client)
{
client->is_running = false;
}