mirror of
https://github.com/falk-werner/webfuse
synced 2025-06-13 12:54:15 +00:00
removes duplicate implementation of slist (message_queue)
This commit is contained in:
parent
5a2cdd237f
commit
037dfe6b02
@ -24,7 +24,7 @@ static bool wf_impl_session_send(
|
|||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
wf_message_queue_push(&session->queue, message);
|
wf_slist_append(&session->messages, &message->item);
|
||||||
lws_callback_on_writable(session->wsi);
|
lws_callback_on_writable(session->wsi);
|
||||||
|
|
||||||
result = true;
|
result = true;
|
||||||
@ -56,7 +56,7 @@ struct wf_impl_session * wf_impl_session_create(
|
|||||||
session->authenticators = authenticators;
|
session->authenticators = authenticators;
|
||||||
session->server = server;
|
session->server = server;
|
||||||
wf_impl_jsonrpc_proxy_init(&session->rpc, timeout_manager, &wf_impl_session_send, session);
|
wf_impl_jsonrpc_proxy_init(&session->rpc, timeout_manager, &wf_impl_session_send, session);
|
||||||
wf_message_queue_init(&session->queue);
|
wf_slist_init(&session->messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
@ -82,7 +82,7 @@ void wf_impl_session_dispose(
|
|||||||
wf_impl_session_dispose_filesystems(&session->filesystems);
|
wf_impl_session_dispose_filesystems(&session->filesystems);
|
||||||
|
|
||||||
wf_impl_jsonrpc_proxy_cleanup(&session->rpc);
|
wf_impl_jsonrpc_proxy_cleanup(&session->rpc);
|
||||||
wf_message_queue_cleanup(&session->queue);
|
wf_message_queue_cleanup(&session->messages);
|
||||||
session->is_authenticated = false;
|
session->is_authenticated = false;
|
||||||
session->wsi = NULL;
|
session->wsi = NULL;
|
||||||
session->authenticators = NULL;
|
session->authenticators = NULL;
|
||||||
@ -113,13 +113,14 @@ bool wf_impl_session_add_filesystem(
|
|||||||
void wf_impl_session_onwritable(
|
void wf_impl_session_onwritable(
|
||||||
struct wf_impl_session * session)
|
struct wf_impl_session * session)
|
||||||
{
|
{
|
||||||
if (!wf_message_queue_empty(&session->queue))
|
if (!wf_slist_empty(&session->messages))
|
||||||
{
|
{
|
||||||
struct wf_message * message = wf_message_queue_pop(&session->queue);
|
struct wf_slist_item * item = wf_slist_remove_first(&session->messages);
|
||||||
|
struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item);
|
||||||
lws_write(session->wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT);
|
lws_write(session->wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT);
|
||||||
wf_message_dispose(message);
|
wf_message_dispose(message);
|
||||||
|
|
||||||
if (!wf_message_queue_empty(&session->queue))
|
if (!wf_slist_empty(&session->messages))
|
||||||
{
|
{
|
||||||
lws_callback_on_writable(session->wsi);
|
lws_callback_on_writable(session->wsi);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ struct wf_impl_session
|
|||||||
char * mount_point;
|
char * mount_point;
|
||||||
struct lws * wsi;
|
struct lws * wsi;
|
||||||
bool is_authenticated;
|
bool is_authenticated;
|
||||||
struct wf_message_queue queue;
|
struct wf_slist messages;
|
||||||
struct wf_impl_authenticators * authenticators;
|
struct wf_impl_authenticators * authenticators;
|
||||||
struct wf_impl_jsonrpc_server * server;
|
struct wf_impl_jsonrpc_server * server;
|
||||||
struct wf_impl_jsonrpc_proxy rpc;
|
struct wf_impl_jsonrpc_proxy rpc;
|
||||||
|
@ -16,7 +16,6 @@ extern struct wf_message * wf_message_create(json_t const * value)
|
|||||||
{
|
{
|
||||||
message->data = &data[sizeof(struct wf_message) + LWS_PRE];
|
message->data = &data[sizeof(struct wf_message) + LWS_PRE];
|
||||||
message->length = length;
|
message->length = length;
|
||||||
message->next = NULL;
|
|
||||||
|
|
||||||
json_dumpb(value, message->data, length, JSON_COMPACT);
|
json_dumpb(value, message->data, length, JSON_COMPACT);
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,11 @@ using std::size_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
|
#include "webfuse/core/slist.h"
|
||||||
|
|
||||||
struct wf_message
|
struct wf_message
|
||||||
{
|
{
|
||||||
struct wf_message * next;
|
struct wf_slist_item item;
|
||||||
char * data;
|
char * data;
|
||||||
size_t length;
|
size_t length;
|
||||||
};
|
};
|
||||||
@ -22,7 +23,8 @@ extern "C"
|
|||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern struct wf_message * wf_message_create(json_t const * value);
|
extern struct wf_message * wf_message_create(
|
||||||
|
json_t const * value);
|
||||||
|
|
||||||
extern void wf_message_dispose(
|
extern void wf_message_dispose(
|
||||||
struct wf_message * message);
|
struct wf_message * message);
|
||||||
|
@ -1,63 +1,17 @@
|
|||||||
#include "webfuse/core/message_queue.h"
|
#include "webfuse/core/message_queue.h"
|
||||||
#include "webfuse/core/message.h"
|
#include "webfuse/core/message.h"
|
||||||
|
#include "webfuse/core/container_of.h"
|
||||||
void wf_message_queue_init(
|
|
||||||
struct wf_message_queue * queue)
|
|
||||||
{
|
|
||||||
queue->first = NULL;
|
|
||||||
queue->last = NULL;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_message_queue_cleanup(
|
void wf_message_queue_cleanup(
|
||||||
struct wf_message_queue * queue)
|
struct wf_slist * queue)
|
||||||
{
|
{
|
||||||
struct wf_message * message = queue->first;
|
struct wf_slist_item * item = queue->first;
|
||||||
while (NULL != message)
|
while (NULL != item)
|
||||||
{
|
{
|
||||||
struct wf_message * next = message->next;
|
struct wf_slist_item * next = item->next;
|
||||||
|
struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item);
|
||||||
wf_message_dispose(message);
|
wf_message_dispose(message);
|
||||||
message = next;
|
item = next;
|
||||||
}
|
}
|
||||||
wf_message_queue_init(queue);
|
wf_slist_init(queue);
|
||||||
}
|
|
||||||
|
|
||||||
bool wf_message_queue_empty(
|
|
||||||
struct wf_message_queue * queue)
|
|
||||||
{
|
|
||||||
return (NULL == queue->first);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_message_queue_push(
|
|
||||||
struct wf_message_queue * queue,
|
|
||||||
struct wf_message * message)
|
|
||||||
{
|
|
||||||
message->next = NULL;
|
|
||||||
|
|
||||||
if (NULL != queue->last)
|
|
||||||
{
|
|
||||||
queue->last->next = message;
|
|
||||||
queue->last = message;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
queue->first = message;
|
|
||||||
queue->last = message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wf_message * wf_message_queue_pop(
|
|
||||||
struct wf_message_queue * queue)
|
|
||||||
{
|
|
||||||
struct wf_message * const result = queue->first;
|
|
||||||
if (NULL != result)
|
|
||||||
{
|
|
||||||
queue->first = queue->first->next;
|
|
||||||
if (NULL == queue->first)
|
|
||||||
{
|
|
||||||
queue->last = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,16 @@
|
|||||||
#ifndef WF_MESSAGE_QUEUE_H
|
#ifndef WF_MESSAGE_QUEUE_H
|
||||||
#define WF_MESSAGE_QUEUE_H
|
#define WF_MESSAGE_QUEUE_H
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#include <stdbool.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_message_queue;
|
|
||||||
struct wf_message;
|
|
||||||
|
|
||||||
struct wf_message_queue
|
|
||||||
{
|
|
||||||
struct wf_message * first;
|
|
||||||
struct wf_message * last;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void wf_message_queue_init(
|
struct wf_slist;
|
||||||
struct wf_message_queue * queue);
|
|
||||||
|
|
||||||
extern void wf_message_queue_cleanup(
|
extern void wf_message_queue_cleanup(
|
||||||
struct wf_message_queue * queue);
|
struct wf_slist * queue);
|
||||||
|
|
||||||
extern bool wf_message_queue_empty(
|
|
||||||
struct wf_message_queue * queue);
|
|
||||||
|
|
||||||
extern void wf_message_queue_push(
|
|
||||||
struct wf_message_queue * queue,
|
|
||||||
struct wf_message * message);
|
|
||||||
|
|
||||||
extern struct wf_message * wf_message_queue_pop(
|
|
||||||
struct wf_message_queue * queue);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include "webfuse/provider/impl/provider.h"
|
#include "webfuse/provider/impl/provider.h"
|
||||||
#include "webfuse/core/util.h"
|
#include "webfuse/core/util.h"
|
||||||
#include "webfuse/core/message.h"
|
#include "webfuse/core/message.h"
|
||||||
|
#include "webfuse/core/message_queue.h"
|
||||||
|
#include "webfuse/core/container_of.h"
|
||||||
|
|
||||||
static void wfp_impl_client_protocol_respond(
|
static void wfp_impl_client_protocol_respond(
|
||||||
json_t * response,
|
json_t * response,
|
||||||
@ -20,7 +22,7 @@ static void wfp_impl_client_protocol_respond(
|
|||||||
struct wf_message * message = wf_message_create(response);
|
struct wf_message * message = wf_message_create(response);
|
||||||
if (NULL != message)
|
if (NULL != message)
|
||||||
{
|
{
|
||||||
wf_message_queue_push(&protocol->queue, message);
|
wf_slist_append(&protocol->messages, &message->item);
|
||||||
lws_callback_on_writable(protocol->wsi);
|
lws_callback_on_writable(protocol->wsi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,7 +61,7 @@ static void wfp_impl_client_protocol_add_filesystem(
|
|||||||
struct wf_message * message = wf_message_create(request);
|
struct wf_message * message = wf_message_create(request);
|
||||||
if (NULL != message)
|
if (NULL != message)
|
||||||
{
|
{
|
||||||
wf_message_queue_push(&protocol->queue, message);
|
wf_slist_append(&protocol->messages, &message->item);
|
||||||
lws_callback_on_writable(protocol->wsi);
|
lws_callback_on_writable(protocol->wsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,13 +98,14 @@ static int wfp_impl_client_protocol_callback(
|
|||||||
case LWS_CALLBACK_SERVER_WRITEABLE:
|
case LWS_CALLBACK_SERVER_WRITEABLE:
|
||||||
// fall-through
|
// fall-through
|
||||||
case LWS_CALLBACK_CLIENT_WRITEABLE:
|
case LWS_CALLBACK_CLIENT_WRITEABLE:
|
||||||
if ((wsi == protocol->wsi) && (!wf_message_queue_empty(&protocol->queue)))
|
if ((wsi == protocol->wsi) && (!wf_slist_empty(&protocol->messages)))
|
||||||
{
|
{
|
||||||
struct wf_message * message = wf_message_queue_pop(&protocol->queue);
|
struct wf_slist_item * item = wf_slist_remove_first(&protocol->messages);
|
||||||
|
struct wf_message * message = WF_CONTAINER_OF(item, struct wf_message, item);
|
||||||
lws_write(wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT);
|
lws_write(wsi, (unsigned char*) message->data, message->length, LWS_WRITE_TEXT);
|
||||||
wf_message_dispose(message);
|
wf_message_dispose(message);
|
||||||
|
|
||||||
if (!wf_message_queue_empty(&protocol->queue))
|
if (!wf_slist_empty(&protocol->messages))
|
||||||
{
|
{
|
||||||
lws_callback_on_writable(wsi);
|
lws_callback_on_writable(wsi);
|
||||||
|
|
||||||
@ -123,7 +126,7 @@ void wfp_impl_client_protocol_init(
|
|||||||
struct wfp_provider const * provider,
|
struct wfp_provider const * provider,
|
||||||
void * user_data)
|
void * user_data)
|
||||||
{
|
{
|
||||||
wf_message_queue_init(&protocol->queue);
|
wf_slist_init(&protocol->messages);
|
||||||
|
|
||||||
protocol->wsi = NULL;
|
protocol->wsi = NULL;
|
||||||
|
|
||||||
@ -137,7 +140,7 @@ void wfp_impl_client_protocol_init(
|
|||||||
void wfp_impl_client_protocol_cleanup(
|
void wfp_impl_client_protocol_cleanup(
|
||||||
struct wfp_client_protocol * protocol)
|
struct wfp_client_protocol * protocol)
|
||||||
{
|
{
|
||||||
wf_message_queue_cleanup(&protocol->queue);
|
wf_message_queue_cleanup(&protocol->messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wfp_client_protocol * wfp_impl_client_protocol_create(
|
struct wfp_client_protocol * wfp_impl_client_protocol_create(
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "webfuse/provider/impl/provider.h"
|
#include "webfuse/provider/impl/provider.h"
|
||||||
#include "webfuse/provider/impl/request.h"
|
#include "webfuse/provider/impl/request.h"
|
||||||
|
|
||||||
#include "webfuse/core/message_queue.h"
|
#include "webfuse/core/slist.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
@ -20,7 +20,7 @@ struct wfp_client_protocol
|
|||||||
struct wfp_provider provider;
|
struct wfp_provider provider;
|
||||||
void * user_data;
|
void * user_data;
|
||||||
struct lws * wsi;
|
struct lws * wsi;
|
||||||
struct wf_message_queue queue;
|
struct wf_slist messages;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void wfp_impl_client_protocol_init(
|
extern void wfp_impl_client_protocol_init(
|
||||||
|
Loading…
Reference in New Issue
Block a user