commit
cd0c4a5213
@ -1,24 +0,0 @@
|
|||||||
# wf_jsonrpc
|
|
||||||
|
|
||||||
add_library(wf_jsonrpc STATIC
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/api.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/proxy.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/server.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/method.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/request.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/response.c
|
|
||||||
lib/wf/jsonrpc/src/wf/jsonrpc/impl/error.c
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(wf_jsonrpc PUBLIC wf_timer)
|
|
||||||
|
|
||||||
target_include_directories(wf_jsonrpc PRIVATE
|
|
||||||
lib/wf/timer/include
|
|
||||||
lib/wf/jsonrpc/src
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(wf_jsonrpc PUBLIC
|
|
||||||
lib/wf/jsonrpc/include
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(wf_jsonrpc PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
@ -1,18 +0,0 @@
|
|||||||
# timer
|
|
||||||
|
|
||||||
add_library(wf_timer STATIC
|
|
||||||
lib/wf/timer/src/wf/timer/api.c
|
|
||||||
lib/wf/timer/src/wf/timer/impl/manager.c
|
|
||||||
lib/wf/timer/src/wf/timer/impl/timepoint.c
|
|
||||||
lib/wf/timer/src/wf/timer/impl/timer.c
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(wf_timer PRIVATE
|
|
||||||
lib/wf/timer/src
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(wf_timer PUBLIC
|
|
||||||
lib/wf/timer/include
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(wf_timer PROPERTIES C_VISIBILITY_PRESET hidden)
|
|
@ -1,2 +1,12 @@
|
|||||||
ignore:
|
ignore:
|
||||||
- test
|
- test
|
||||||
|
- lib/wf/timer/test
|
||||||
|
- lib/wf/jsonrpc/test
|
||||||
|
|
||||||
|
parsers:
|
||||||
|
gcov:
|
||||||
|
branch_detection:
|
||||||
|
conditional: yes
|
||||||
|
loop: yes
|
||||||
|
method: yes
|
||||||
|
macro: yes
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_CLOSE_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_CLOSE_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void wf_impl_operation_close(
|
||||||
|
fuse_req_t request,
|
||||||
|
fuse_ino_t inode,
|
||||||
|
struct fuse_file_info * file_info);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -1,10 +1,10 @@
|
|||||||
#include "webfuse/adapter/impl/operations.h"
|
#include "webfuse/adapter/impl/operation/context.h"
|
||||||
#include "webfuse/adapter/impl/session_manager.h"
|
#include "webfuse/adapter/impl/session_manager.h"
|
||||||
#include "webfuse/adapter/impl/session.h"
|
#include "webfuse/adapter/impl/session.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
struct wf_jsonrpc_proxy * wf_impl_operations_context_get_proxy(
|
struct wf_jsonrpc_proxy * wf_impl_operation_context_get_proxy(
|
||||||
struct wf_impl_operations_context * context)
|
struct wf_impl_operation_context * context)
|
||||||
{
|
{
|
||||||
struct wf_jsonrpc_proxy * proxy = NULL;
|
struct wf_jsonrpc_proxy * proxy = NULL;
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_CONTEXT_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_CONTEXT_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_impl_session;
|
||||||
|
struct wf_jsonrpc_proxy;
|
||||||
|
|
||||||
|
struct wf_impl_operation_context
|
||||||
|
{
|
||||||
|
struct wf_impl_session * session;
|
||||||
|
double timeout;
|
||||||
|
char * name;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct wf_jsonrpc_proxy * wf_impl_operation_context_get_proxy(
|
||||||
|
struct wf_impl_operation_context * context);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_GETATTR_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_GETATTR_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
|
||||||
|
#include <jansson.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_impl_operation_getattr_context
|
||||||
|
{
|
||||||
|
fuse_req_t request;
|
||||||
|
fuse_ino_t inode;
|
||||||
|
double timeout;
|
||||||
|
uid_t uid;
|
||||||
|
gid_t gid;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void wf_impl_operation_getattr_finished(
|
||||||
|
void * user_data,
|
||||||
|
json_t const * result,
|
||||||
|
json_t const * error);
|
||||||
|
|
||||||
|
extern void wf_impl_operation_getattr (
|
||||||
|
fuse_req_t request,
|
||||||
|
fuse_ino_t inode,
|
||||||
|
struct fuse_file_info *file_info);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_LOOKUP_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_LOOKUP_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
|
||||||
|
#include <jansson.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_impl_operation_lookup_context
|
||||||
|
{
|
||||||
|
fuse_req_t request;
|
||||||
|
double timeout;
|
||||||
|
uid_t uid;
|
||||||
|
gid_t gid;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void wf_impl_operation_lookup_finished(
|
||||||
|
void * user_data,
|
||||||
|
json_t const * result,
|
||||||
|
json_t const * error);
|
||||||
|
|
||||||
|
extern void wf_impl_operation_lookup (
|
||||||
|
fuse_req_t req,
|
||||||
|
fuse_ino_t parent,
|
||||||
|
char const * name);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_OPEN_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_OPEN_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
#include <jansson.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void wf_impl_operation_open(
|
||||||
|
fuse_req_t request,
|
||||||
|
fuse_ino_t inode,
|
||||||
|
struct fuse_file_info * file_info);
|
||||||
|
|
||||||
|
extern void wf_impl_operation_open_finished(
|
||||||
|
void * user_data,
|
||||||
|
json_t const * result,
|
||||||
|
json_t const * error);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_READ_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_READ_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
#include "webfuse/core/status.h"
|
||||||
|
|
||||||
|
#include <jansson.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void wf_impl_operation_read(
|
||||||
|
fuse_req_t request,
|
||||||
|
fuse_ino_t ino, size_t size, off_t off,
|
||||||
|
struct fuse_file_info *fi);
|
||||||
|
|
||||||
|
extern char * wf_impl_fill_buffer(
|
||||||
|
char const * data,
|
||||||
|
size_t data_size,
|
||||||
|
char const * format,
|
||||||
|
size_t count,
|
||||||
|
wf_status * status);
|
||||||
|
|
||||||
|
extern void wf_impl_operation_read_finished(
|
||||||
|
void * user_data,
|
||||||
|
json_t const * result,
|
||||||
|
json_t const * error);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,35 @@
|
|||||||
|
#ifndef WF_ADAPTER_IMPL_OPERATION_READDIR_H
|
||||||
|
#define WF_ADAPTER_IMPL_OPERATION_READDIR_H
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
#include <jansson.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_impl_operation_readdir_context
|
||||||
|
{
|
||||||
|
fuse_req_t request;
|
||||||
|
size_t size;
|
||||||
|
off_t offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void wf_impl_operation_readdir (
|
||||||
|
fuse_req_t request,
|
||||||
|
fuse_ino_t inode,
|
||||||
|
size_t size,
|
||||||
|
off_t offset,
|
||||||
|
struct fuse_file_info *file_info);
|
||||||
|
|
||||||
|
extern void wf_impl_operation_readdir_finished(
|
||||||
|
void * user_data,
|
||||||
|
json_t const * result,
|
||||||
|
json_t const * error);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -1,60 +0,0 @@
|
|||||||
#ifndef WF_ADAPTER_IMPL_OPERATIONS_H
|
|
||||||
#define WF_ADAPTER_IMPL_OPERATIONS_H
|
|
||||||
|
|
||||||
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_impl_session;
|
|
||||||
struct wf_jsonrpc_proxy;
|
|
||||||
|
|
||||||
struct wf_impl_operations_context
|
|
||||||
{
|
|
||||||
struct wf_impl_session * session;
|
|
||||||
double timeout;
|
|
||||||
char * name;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern void wf_impl_operation_lookup (
|
|
||||||
fuse_req_t req,
|
|
||||||
fuse_ino_t parent,
|
|
||||||
char const * name);
|
|
||||||
|
|
||||||
extern void wf_impl_operation_getattr (
|
|
||||||
fuse_req_t request,
|
|
||||||
fuse_ino_t inode,
|
|
||||||
struct fuse_file_info *file_info);
|
|
||||||
|
|
||||||
extern void wf_impl_operation_readdir (
|
|
||||||
fuse_req_t request,
|
|
||||||
fuse_ino_t inode,
|
|
||||||
size_t size,
|
|
||||||
off_t offset,
|
|
||||||
struct fuse_file_info *file_info);
|
|
||||||
|
|
||||||
extern void wf_impl_operation_open(
|
|
||||||
fuse_req_t request,
|
|
||||||
fuse_ino_t inode,
|
|
||||||
struct fuse_file_info * file_info);
|
|
||||||
|
|
||||||
extern void wf_impl_operation_close(
|
|
||||||
fuse_req_t request,
|
|
||||||
fuse_ino_t inode,
|
|
||||||
struct fuse_file_info * file_info);
|
|
||||||
|
|
||||||
extern void wf_impl_operation_read(
|
|
||||||
fuse_req_t request,
|
|
||||||
fuse_ino_t ino, size_t size, off_t off,
|
|
||||||
struct fuse_file_info *fi);
|
|
||||||
|
|
||||||
extern struct wf_jsonrpc_proxy * wf_impl_operations_context_get_proxy(
|
|
||||||
struct wf_impl_operations_context * context);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,25 +1,22 @@
|
|||||||
#include "wf/jsonrpc/impl/method.h"
|
#include "webfuse/core/jsonrpc/method.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
struct wf_jsonrpc_method * wf_jsonrpc_impl_method_create(
|
struct wf_jsonrpc_method * wf_jsonrpc_method_create(
|
||||||
char const * method_name,
|
char const * method_name,
|
||||||
wf_jsonrpc_method_invoke_fn * invoke,
|
wf_jsonrpc_method_invoke_fn * invoke,
|
||||||
void * user_data)
|
void * user_data)
|
||||||
{
|
{
|
||||||
struct wf_jsonrpc_method * method = malloc(sizeof(struct wf_jsonrpc_method));
|
struct wf_jsonrpc_method * method = malloc(sizeof(struct wf_jsonrpc_method));
|
||||||
if (NULL != method)
|
method->next = NULL;
|
||||||
{
|
method->name = strdup(method_name);
|
||||||
method->next = NULL;
|
method->invoke = invoke;
|
||||||
method->name = strdup(method_name);
|
method->user_data = user_data;
|
||||||
method->invoke = invoke;
|
|
||||||
method->user_data = user_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wf_jsonrpc_impl_method_dispose(
|
void wf_jsonrpc_method_dispose(
|
||||||
struct wf_jsonrpc_method * method)
|
struct wf_jsonrpc_method * method)
|
||||||
{
|
{
|
||||||
free(method->name);
|
free(method->name);
|
@ -0,0 +1,28 @@
|
|||||||
|
#include "webfuse/core/jsonrpc/proxy_intern.h"
|
||||||
|
|
||||||
|
void wf_jsonrpc_proxy_invoke(
|
||||||
|
struct wf_jsonrpc_proxy * proxy,
|
||||||
|
wf_jsonrpc_proxy_finished_fn * finished,
|
||||||
|
void * user_data,
|
||||||
|
char const * method_name,
|
||||||
|
char const * param_info,
|
||||||
|
...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, param_info);
|
||||||
|
wf_jsonrpc_proxy_vinvoke(proxy, finished, user_data, method_name, param_info, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void wf_jsonrpc_proxy_notify(
|
||||||
|
struct wf_jsonrpc_proxy * proxy,
|
||||||
|
char const * method_name,
|
||||||
|
char const * param_info,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, param_info);
|
||||||
|
wf_jsonrpc_proxy_vnotify(proxy, method_name, param_info, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef WF_TIMER_MANAGER_INTERN_H
|
||||||
|
#define WF_TIMER_MANAGER_INTERN_H
|
||||||
|
|
||||||
|
#include "webfuse/core/timer/manager.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_timer;
|
||||||
|
|
||||||
|
extern void wf_timer_manager_addtimer(
|
||||||
|
struct wf_timer_manager * manager,
|
||||||
|
struct wf_timer * timer);
|
||||||
|
|
||||||
|
extern void wf_timer_manager_removetimer(
|
||||||
|
struct wf_timer_manager * manager,
|
||||||
|
struct wf_timer * timer);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,40 @@
|
|||||||
|
#ifndef WF_TIMER_TIMER_H
|
||||||
|
#define WF_TIMER_TIMER_H
|
||||||
|
|
||||||
|
#include "webfuse/core/timer/timer.h"
|
||||||
|
#include "webfuse/core/timer/on_timer_fn.h"
|
||||||
|
#include "webfuse/core/timer/timepoint.h"
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct wf_timer
|
||||||
|
{
|
||||||
|
struct wf_timer_manager * manager;
|
||||||
|
wf_timer_timepoint timeout;
|
||||||
|
wf_timer_on_timer_fn * on_timer;
|
||||||
|
void * user_data;
|
||||||
|
struct wf_timer * next;
|
||||||
|
struct wf_timer * prev;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern bool wf_timer_is_timeout(
|
||||||
|
struct wf_timer * timer);
|
||||||
|
|
||||||
|
extern void wf_timer_trigger(
|
||||||
|
struct wf_timer * timer);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -1,14 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_H
|
|
||||||
#define WF_JSONRPC_H
|
|
||||||
|
|
||||||
#include <wf/jsonrpc/api.h>
|
|
||||||
#include <wf/jsonrpc/method_invoke_fn.h>
|
|
||||||
#include <wf/jsonrpc/proxy.h>
|
|
||||||
#include <wf/jsonrpc/proxy_finished_fn.h>
|
|
||||||
#include <wf/jsonrpc/request.h>
|
|
||||||
#include <wf/jsonrpc/response.h>
|
|
||||||
#include <wf/jsonrpc/send_fn.h>
|
|
||||||
#include <wf/jsonrpc/server.h>
|
|
||||||
#include <wf/jsonrpc/status.h>
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,8 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_API_H
|
|
||||||
#define WF_JSONRPC_API_H
|
|
||||||
|
|
||||||
#ifndef WF_JSONRPC_API
|
|
||||||
#define WF_JSONRPC_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,11 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_STATUS_H
|
|
||||||
#define WF_JSONRPC_STATUS_H
|
|
||||||
|
|
||||||
#define WF_JSONRPC_GOOD 0
|
|
||||||
#define WF_JSONRPC_BAD -1
|
|
||||||
#define WF_JSONRPC_BAD_NOTIMPLEMENTED -2
|
|
||||||
#define WF_JSONRPC_BAD_TIMEOUT -3
|
|
||||||
#define WF_JSONRPC_BAD_BUSY -4
|
|
||||||
#define WF_JSONRPC_BAD_FORMAT -5
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,144 +0,0 @@
|
|||||||
#include "wf/jsonrpc.h"
|
|
||||||
|
|
||||||
#include "wf/jsonrpc/impl/proxy.h"
|
|
||||||
#include "wf/jsonrpc/impl/request.h"
|
|
||||||
#include "wf/jsonrpc/impl/response.h"
|
|
||||||
#include "wf/jsonrpc/impl/server.h"
|
|
||||||
|
|
||||||
// proxy
|
|
||||||
|
|
||||||
struct wf_jsonrpc_proxy *
|
|
||||||
wf_jsonrpc_proxy_create(
|
|
||||||
struct wf_timer_manager * manager,
|
|
||||||
int timeout,
|
|
||||||
wf_jsonrpc_send_fn * send,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_proxy_create(manager, timeout, send, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_proxy_dispose(
|
|
||||||
struct wf_jsonrpc_proxy * proxy)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_proxy_dispose(proxy);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_proxy_invoke(
|
|
||||||
struct wf_jsonrpc_proxy * proxy,
|
|
||||||
wf_jsonrpc_proxy_finished_fn * finished,
|
|
||||||
void * user_data,
|
|
||||||
char const * method_name,
|
|
||||||
char const * param_info,
|
|
||||||
...
|
|
||||||
)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start(args, param_info);
|
|
||||||
wf_jsonrpc_impl_proxy_invoke(proxy, finished, user_data, method_name, param_info, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_proxy_notify(
|
|
||||||
struct wf_jsonrpc_proxy * proxy,
|
|
||||||
char const * method_name,
|
|
||||||
char const * param_info,
|
|
||||||
...
|
|
||||||
)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start(args, param_info);
|
|
||||||
wf_jsonrpc_impl_proxy_notify(proxy, method_name, param_info, args);
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_proxy_onresult(
|
|
||||||
struct wf_jsonrpc_proxy * proxy,
|
|
||||||
json_t * message)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_proxy_onresult(proxy, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// request
|
|
||||||
|
|
||||||
bool wf_jsonrpc_is_request(
|
|
||||||
json_t * message)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_is_request(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wf_jsonrpc_request * wf_jsonrpc_request_create(
|
|
||||||
int id,
|
|
||||||
wf_jsonrpc_send_fn * send,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_request_create(id, send, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_request_dispose(
|
|
||||||
struct wf_jsonrpc_request * request)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_request_dispose(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
void * wf_jsonrpc_request_get_userdata(
|
|
||||||
struct wf_jsonrpc_request * request)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_request_get_userdata(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_respond(
|
|
||||||
struct wf_jsonrpc_request * request,
|
|
||||||
json_t * result)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_respond(request, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_respond_error(
|
|
||||||
struct wf_jsonrpc_request * request,
|
|
||||||
int code,
|
|
||||||
char const * message)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_respond_error(request, code, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// response
|
|
||||||
|
|
||||||
bool wf_jsonrpc_is_response(
|
|
||||||
json_t * message)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_is_response(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// server
|
|
||||||
|
|
||||||
struct wf_jsonrpc_server *
|
|
||||||
wf_jsonrpc_server_create(void)
|
|
||||||
{
|
|
||||||
return wf_jsonrpc_impl_server_create();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_jsonrpc_server_dispose(
|
|
||||||
struct wf_jsonrpc_server * server)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_server_dispose(server);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_server_add(
|
|
||||||
struct wf_jsonrpc_server * server,
|
|
||||||
char const * method_name,
|
|
||||||
wf_jsonrpc_method_invoke_fn * invoke,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_server_add(server, method_name, invoke, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wf_jsonrpc_server_process(
|
|
||||||
struct wf_jsonrpc_server * server,
|
|
||||||
json_t * request,
|
|
||||||
wf_jsonrpc_send_fn * send,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
wf_jsonrpc_impl_server_process(server, request, send, user_data);
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_IMPL_REQUEST_H
|
|
||||||
#define WF_JSONRPC_IMPL_REQUEST_H
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#else
|
|
||||||
#include <cstdarg>
|
|
||||||
#include <cstddef>
|
|
||||||
using std::size_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <jansson.h>
|
|
||||||
#include <wf/jsonrpc/api.h>
|
|
||||||
#include "wf/jsonrpc/send_fn.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_jsonrpc_request;
|
|
||||||
|
|
||||||
extern bool wf_jsonrpc_impl_is_request(
|
|
||||||
json_t * message);
|
|
||||||
|
|
||||||
extern struct wf_jsonrpc_request * wf_jsonrpc_impl_request_create(
|
|
||||||
int id,
|
|
||||||
wf_jsonrpc_send_fn * send,
|
|
||||||
void * user_data);
|
|
||||||
|
|
||||||
extern void wf_jsonrpc_impl_request_dispose(
|
|
||||||
struct wf_jsonrpc_request * request);
|
|
||||||
|
|
||||||
extern void * wf_jsonrpc_impl_request_get_userdata(
|
|
||||||
struct wf_jsonrpc_request * request);
|
|
||||||
|
|
||||||
extern void wf_jsonrpc_impl_respond(
|
|
||||||
struct wf_jsonrpc_request * request,
|
|
||||||
json_t * result);
|
|
||||||
|
|
||||||
extern void wf_jsonrpc_impl_respond_error(
|
|
||||||
struct wf_jsonrpc_request * request,
|
|
||||||
int code,
|
|
||||||
char const * message);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,41 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_IMPL_SERVER_H
|
|
||||||
#define WF_JSONRPC_IMPL_SERVER_H
|
|
||||||
|
|
||||||
#include <jansson.h>
|
|
||||||
#include "wf/jsonrpc/method_invoke_fn.h"
|
|
||||||
#include "wf/jsonrpc/send_fn.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_jsonrpc_server;
|
|
||||||
|
|
||||||
extern struct wf_jsonrpc_server *
|
|
||||||
wf_jsonrpc_impl_server_create(void);
|
|
||||||
|
|
||||||
extern void
|
|
||||||
wf_jsonrpc_impl_server_dispose(
|
|
||||||
struct wf_jsonrpc_server * server);
|
|
||||||
|
|
||||||
extern void
|
|
||||||
wf_jsonrpc_impl_server_add(
|
|
||||||
struct wf_jsonrpc_server * server,
|
|
||||||
char const * method_name,
|
|
||||||
wf_jsonrpc_method_invoke_fn * invoke,
|
|
||||||
void * user_data);
|
|
||||||
|
|
||||||
extern void
|
|
||||||
wf_jsonrpc_impl_server_process(
|
|
||||||
struct wf_jsonrpc_server * server,
|
|
||||||
json_t * request,
|
|
||||||
wf_jsonrpc_send_fn * send,
|
|
||||||
void * user_data);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,10 +0,0 @@
|
|||||||
#ifndef WF_JSONRPC_UTIL_H
|
|
||||||
#define WF_JSONRPC_UTIL_H
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define WF_JSONRPC_UNUSED_PARAM(param) param __attribute__((unused))
|
|
||||||
#else
|
|
||||||
#define WF_JSONRPC_UNUSED_PARAM(param)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,58 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
#include "wf/jsonrpc/impl/response.h"
|
|
||||||
#include "wf/jsonrpc/status.h"
|
|
||||||
|
|
||||||
TEST(wf_json_response, init_result)
|
|
||||||
{
|
|
||||||
json_t * message = json_object();
|
|
||||||
json_object_set_new(message, "result", json_integer(47));
|
|
||||||
json_object_set_new(message, "id", json_integer(11));
|
|
||||||
|
|
||||||
struct wf_jsonrpc_response response;
|
|
||||||
wf_jsonrpc_impl_response_init(&response, message);
|
|
||||||
|
|
||||||
ASSERT_EQ(nullptr, response.error);
|
|
||||||
ASSERT_TRUE(json_is_integer(response.result));
|
|
||||||
ASSERT_EQ(47, json_integer_value(response.result));
|
|
||||||
ASSERT_EQ(11, response.id);
|
|
||||||
|
|
||||||
wf_jsonrpc_impl_response_cleanup(&response);
|
|
||||||
json_decref(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_json_response, init_error)
|
|
||||||
{
|
|
||||||
json_t * message = json_object();
|
|
||||||
json_t * err = json_object();
|
|
||||||
json_object_set_new(err, "code", json_integer(42));
|
|
||||||
json_object_set_new(err, "message", json_string("Don't Panic!"));
|
|
||||||
json_object_set_new(message, "error", err);
|
|
||||||
json_object_set_new(message, "id", json_integer(23));
|
|
||||||
|
|
||||||
struct wf_jsonrpc_response response;
|
|
||||||
wf_jsonrpc_impl_response_init(&response, message);
|
|
||||||
|
|
||||||
ASSERT_EQ(42, json_integer_value(json_object_get(response.error, "code")));
|
|
||||||
ASSERT_STREQ("Don't Panic!", json_string_value(json_object_get(response.error, "message")));
|
|
||||||
ASSERT_EQ(nullptr, response.result);
|
|
||||||
ASSERT_EQ(23, response.id);
|
|
||||||
|
|
||||||
wf_jsonrpc_impl_response_cleanup(&response);
|
|
||||||
json_decref(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_json_response, init_format_error)
|
|
||||||
{
|
|
||||||
json_t * message = json_object();
|
|
||||||
json_object_set_new(message, "id", json_integer(12));
|
|
||||||
|
|
||||||
struct wf_jsonrpc_response response;
|
|
||||||
wf_jsonrpc_impl_response_init(&response, message);
|
|
||||||
|
|
||||||
ASSERT_EQ(WF_JSONRPC_BAD_FORMAT, json_integer_value(json_object_get(response.error, "code")));
|
|
||||||
ASSERT_EQ(nullptr, response.result);
|
|
||||||
ASSERT_EQ(12, response.id);
|
|
||||||
|
|
||||||
wf_jsonrpc_impl_response_cleanup(&response);
|
|
||||||
json_decref(message);
|
|
||||||
}
|
|
@ -1,123 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
#include "wf/jsonrpc/server.h"
|
|
||||||
#include "wf/jsonrpc/request.h"
|
|
||||||
#include "wf/jsonrpc/status.h"
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
struct Context
|
|
||||||
{
|
|
||||||
json_t * response;
|
|
||||||
bool is_called;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool jsonrpc_send(
|
|
||||||
json_t * request,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
Context * context = reinterpret_cast<Context*>(user_data);
|
|
||||||
context->is_called = true;
|
|
||||||
context->response = request;
|
|
||||||
json_incref(request);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sayHello(
|
|
||||||
struct wf_jsonrpc_request * request,
|
|
||||||
char const * method_name,
|
|
||||||
json_t * params,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
(void) method_name;
|
|
||||||
(void) params;
|
|
||||||
(void) user_data;
|
|
||||||
|
|
||||||
json_t * result = json_string("Hello");
|
|
||||||
wf_jsonrpc_respond(request, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_jsonrpc_server, process_request)
|
|
||||||
{
|
|
||||||
struct wf_jsonrpc_server * server = wf_jsonrpc_server_create();
|
|
||||||
wf_jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
|
|
||||||
|
|
||||||
Context context{nullptr, false};
|
|
||||||
void * user_data = reinterpret_cast<void*>(&context);
|
|
||||||
json_t * request = json_object();
|
|
||||||
json_object_set_new(request, "method", json_string("sayHello"));
|
|
||||||
json_object_set_new(request, "params", json_array());
|
|
||||||
json_object_set_new(request, "id", json_integer(23));
|
|
||||||
wf_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
|
|
||||||
|
|
||||||
ASSERT_TRUE(context.is_called);
|
|
||||||
ASSERT_NE(nullptr, context.response);
|
|
||||||
ASSERT_TRUE(json_is_object(context.response));
|
|
||||||
|
|
||||||
json_t * id = json_object_get(context.response, "id");
|
|
||||||
ASSERT_TRUE(json_is_integer(id));
|
|
||||||
ASSERT_EQ(23, json_integer_value(id));
|
|
||||||
|
|
||||||
json_t * result = json_object_get(context.response, "result");
|
|
||||||
ASSERT_TRUE(json_is_string(result));
|
|
||||||
ASSERT_STREQ("Hello", json_string_value(result));
|
|
||||||
|
|
||||||
json_decref(context.response);
|
|
||||||
json_decref(request);
|
|
||||||
wf_jsonrpc_server_dispose(server);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_jsonrpc_server, invoke_unknown_method)
|
|
||||||
{
|
|
||||||
struct wf_jsonrpc_server * server = wf_jsonrpc_server_create();
|
|
||||||
wf_jsonrpc_server_add(server, "sayHello", &sayHello, nullptr);
|
|
||||||
|
|
||||||
Context context{nullptr, false};
|
|
||||||
void * user_data = reinterpret_cast<void*>(&context);
|
|
||||||
json_t * request = json_object();
|
|
||||||
json_object_set_new(request, "method", json_string("greet"));
|
|
||||||
json_object_set_new(request, "params", json_array());
|
|
||||||
json_object_set_new(request, "id", json_integer(42));
|
|
||||||
wf_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
|
|
||||||
|
|
||||||
ASSERT_TRUE(context.is_called);
|
|
||||||
ASSERT_NE(nullptr, context.response);
|
|
||||||
ASSERT_TRUE(json_is_object(context.response));
|
|
||||||
|
|
||||||
json_t * id = json_object_get(context.response, "id");
|
|
||||||
ASSERT_TRUE(json_is_integer(id));
|
|
||||||
ASSERT_EQ(42, json_integer_value(id));
|
|
||||||
|
|
||||||
json_t * err = json_object_get(context.response, "error");
|
|
||||||
ASSERT_TRUE(json_is_object(err));
|
|
||||||
|
|
||||||
json_t * err_code = json_object_get(err, "code");
|
|
||||||
ASSERT_TRUE(json_is_integer(err_code));
|
|
||||||
ASSERT_EQ(WF_JSONRPC_BAD_NOTIMPLEMENTED, json_integer_value(err_code));
|
|
||||||
|
|
||||||
json_t * err_message = json_object_get(err, "message");
|
|
||||||
ASSERT_TRUE(json_is_string(err_message));
|
|
||||||
|
|
||||||
json_decref(context.response);
|
|
||||||
json_decref(request);
|
|
||||||
wf_jsonrpc_server_dispose(server);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_jsonrpc_server, skip_invalid_request)
|
|
||||||
{
|
|
||||||
struct wf_jsonrpc_server * server = wf_jsonrpc_server_create();
|
|
||||||
|
|
||||||
Context context{nullptr, false};
|
|
||||||
void * user_data = reinterpret_cast<void*>(&context);
|
|
||||||
json_t * request = json_object();
|
|
||||||
json_object_set_new(request, "method", json_string("sayHello"));
|
|
||||||
json_object_set_new(request, "params", json_array());
|
|
||||||
wf_jsonrpc_server_process(server, request, &jsonrpc_send, user_data);
|
|
||||||
|
|
||||||
ASSERT_FALSE(context.is_called);
|
|
||||||
|
|
||||||
json_decref(request);
|
|
||||||
wf_jsonrpc_server_dispose(server);
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
#ifndef WF_TIMER_H
|
|
||||||
#define WF_TIMER_H
|
|
||||||
|
|
||||||
#include <wf/timer/api.h>
|
|
||||||
#include <wf/timer/on_timer_fn.h>
|
|
||||||
#include <wf/timer/timer.h>
|
|
||||||
#include <wf/timer/manager.h>
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,8 +0,0 @@
|
|||||||
#ifndef WF_TIMER_API_H
|
|
||||||
#define WF_TIMER_API_H
|
|
||||||
|
|
||||||
#ifndef WF_TIMER_API
|
|
||||||
#define WF_TIMER_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,59 +0,0 @@
|
|||||||
#include "wf/timer.h"
|
|
||||||
|
|
||||||
#include "wf/timer/impl/manager.h"
|
|
||||||
#include "wf/timer/impl/timer.h"
|
|
||||||
|
|
||||||
// manager
|
|
||||||
|
|
||||||
struct wf_timer_manager *
|
|
||||||
wf_timer_manager_create(void)
|
|
||||||
{
|
|
||||||
return wf_timer_impl_manager_create();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_manager_dispose(
|
|
||||||
struct wf_timer_manager * manager)
|
|
||||||
{
|
|
||||||
wf_timer_impl_manager_dispose(manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_manager_check(
|
|
||||||
struct wf_timer_manager * manager)
|
|
||||||
{
|
|
||||||
wf_timer_impl_manager_check(manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
// timer
|
|
||||||
|
|
||||||
struct wf_timer *
|
|
||||||
wf_timer_create(
|
|
||||||
struct wf_timer_manager * manager,
|
|
||||||
wf_timer_on_timer_fn * on_timer,
|
|
||||||
void * user_data)
|
|
||||||
{
|
|
||||||
return wf_timer_impl_create(manager, on_timer, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_dispose(
|
|
||||||
struct wf_timer * timer)
|
|
||||||
{
|
|
||||||
wf_timer_impl_dispose(timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_start(
|
|
||||||
struct wf_timer * timer,
|
|
||||||
int timeout_ms)
|
|
||||||
{
|
|
||||||
wf_timer_impl_start(timer, timeout_ms);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_cancel(
|
|
||||||
struct wf_timer * timer)
|
|
||||||
{
|
|
||||||
wf_timer_impl_cancel(timer);
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
#ifndef WF_TIMER_IMPL_MANAGER_H
|
|
||||||
#define WF_TIMER_IMPL_MANAGER_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_timer;
|
|
||||||
struct wf_timer_manager;
|
|
||||||
|
|
||||||
extern struct wf_timer_manager *
|
|
||||||
wf_timer_impl_manager_create(void);
|
|
||||||
|
|
||||||
extern void
|
|
||||||
wf_timer_impl_manager_dispose(
|
|
||||||
struct wf_timer_manager * manager);
|
|
||||||
|
|
||||||
extern void
|
|
||||||
wf_timer_impl_manager_check(
|
|
||||||
struct wf_timer_manager * manager);
|
|
||||||
|
|
||||||
extern void wf_timer_impl_manager_addtimer(
|
|
||||||
struct wf_timer_manager * manager,
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
extern void wf_timer_impl_manager_removetimer(
|
|
||||||
struct wf_timer_manager * manager,
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,59 +0,0 @@
|
|||||||
#ifndef WF_ADAPTER_IMPL_TIME_TIMER_H
|
|
||||||
#define WF_ADAPTER_IMPL_TIME_TIMER_H
|
|
||||||
|
|
||||||
#include "wf/timer/on_timer_fn.h"
|
|
||||||
#include "wf/timer/impl/timepoint.h"
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#include <stdbool.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct wf_timer_manager;
|
|
||||||
|
|
||||||
struct wf_timer
|
|
||||||
{
|
|
||||||
struct wf_timer_manager * manager;
|
|
||||||
wf_timer_timepoint timeout;
|
|
||||||
wf_timer_on_timer_fn * on_timer;
|
|
||||||
void * user_data;
|
|
||||||
struct wf_timer * next;
|
|
||||||
struct wf_timer * prev;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct wf_timer *
|
|
||||||
wf_timer_impl_create(
|
|
||||||
struct wf_timer_manager * manager,
|
|
||||||
wf_timer_on_timer_fn * on_timer,
|
|
||||||
void * user_data);
|
|
||||||
|
|
||||||
void
|
|
||||||
wf_timer_impl_dispose(
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
extern void wf_timer_impl_start(
|
|
||||||
struct wf_timer * timer,
|
|
||||||
int timeout_ms);
|
|
||||||
|
|
||||||
extern void wf_timer_impl_cancel(
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
extern bool wf_timer_impl_is_timeout(
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
extern void wf_timer_impl_trigger(
|
|
||||||
struct wf_timer * timer);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,38 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
#include "wf/timer/impl/timepoint.h"
|
|
||||||
|
|
||||||
#include <thread>
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
using namespace std::chrono_literals;
|
|
||||||
|
|
||||||
TEST(wf_timer_timepoint, now)
|
|
||||||
{
|
|
||||||
wf_timer_timepoint start = wf_timer_impl_timepoint_now();
|
|
||||||
std::this_thread::sleep_for(42ms);
|
|
||||||
wf_timer_timepoint end = wf_timer_impl_timepoint_now();
|
|
||||||
|
|
||||||
ASSERT_LT(start, end);
|
|
||||||
ASSERT_LT(end, start + 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_timer_timepoint, in_msec)
|
|
||||||
{
|
|
||||||
wf_timer_timepoint now = wf_timer_impl_timepoint_now();
|
|
||||||
wf_timer_timepoint later = wf_timer_impl_timepoint_in_msec(42);
|
|
||||||
|
|
||||||
ASSERT_LT(now, later);
|
|
||||||
ASSERT_LT(later, now + 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(wf_timer_timepoint, elapsed)
|
|
||||||
{
|
|
||||||
wf_timer_timepoint now;
|
|
||||||
|
|
||||||
now = wf_timer_impl_timepoint_now();
|
|
||||||
ASSERT_TRUE(wf_timer_impl_timepoint_is_elapsed(now - 1));
|
|
||||||
|
|
||||||
now = wf_timer_impl_timepoint_now();
|
|
||||||
ASSERT_FALSE(wf_timer_impl_timepoint_is_elapsed(now + 500));
|
|
||||||
}
|
|
@ -0,0 +1,17 @@
|
|||||||
|
#include "webfuse/mocks/fake_invokation_context.hpp"
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
wfp_impl_invokation_context create_context(MockProvider& provider, wfp_request * request)
|
||||||
|
{
|
||||||
|
wfp_impl_invokation_context context =
|
||||||
|
{
|
||||||
|
provider.get_provider(),
|
||||||
|
provider.get_userdata(),
|
||||||
|
request
|
||||||
|
};
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef FAKE_INVOCATION_CONTEXT_HPP
|
||||||
|
#define FAKE_INVOCATION_CONTEXT_HPP
|
||||||
|
|
||||||
|
#include "webfuse/provider/impl/provider.h"
|
||||||
|
#include "webfuse/mocks/mock_provider.hpp"
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
wfp_impl_invokation_context create_context(
|
||||||
|
MockProvider& provider,
|
||||||
|
wfp_request * request = nullptr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,31 @@
|
|||||||
|
#include "webfuse/mocks/mock_fuse.hpp"
|
||||||
|
#include "webfuse/utils/wrap.hpp"
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
static webfuse_test::FuseMock * webfuse_test_FuseMock = nullptr;
|
||||||
|
|
||||||
|
WF_WRAP_FUNC1(webfuse_test_FuseMock, void*, fuse_req_userdata, fuse_req_t);
|
||||||
|
WF_WRAP_FUNC2(webfuse_test_FuseMock, int, fuse_reply_open, fuse_req_t, const struct fuse_file_info *);
|
||||||
|
WF_WRAP_FUNC2(webfuse_test_FuseMock, int, fuse_reply_err, fuse_req_t, int);
|
||||||
|
WF_WRAP_FUNC3(webfuse_test_FuseMock, int, fuse_reply_buf, fuse_req_t, const char *, size_t);
|
||||||
|
WF_WRAP_FUNC3(webfuse_test_FuseMock, int, fuse_reply_attr, fuse_req_t, const struct stat *, double);
|
||||||
|
WF_WRAP_FUNC1(webfuse_test_FuseMock, const struct fuse_ctx *, fuse_req_ctx, fuse_req_t);
|
||||||
|
WF_WRAP_FUNC2(webfuse_test_FuseMock, int, fuse_reply_entry, fuse_req_t, const struct fuse_entry_param *);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
FuseMock::FuseMock()
|
||||||
|
{
|
||||||
|
webfuse_test_FuseMock = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
FuseMock::~FuseMock()
|
||||||
|
{
|
||||||
|
webfuse_test_FuseMock = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef MOCK_FUSE_HPP
|
||||||
|
#define MOCK_FUSE_HPP
|
||||||
|
|
||||||
|
#include "webfuse/adapter/impl/fuse_wrapper.h"
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
class FuseMock
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FuseMock();
|
||||||
|
virtual ~FuseMock();
|
||||||
|
|
||||||
|
MOCK_METHOD1(fuse_req_userdata, void *(fuse_req_t req));
|
||||||
|
MOCK_METHOD2(fuse_reply_open, int (fuse_req_t req, const struct fuse_file_info *fi));
|
||||||
|
MOCK_METHOD2(fuse_reply_err, int (fuse_req_t req, int err));
|
||||||
|
MOCK_METHOD3(fuse_reply_buf, int (fuse_req_t req, const char *buf, size_t size));
|
||||||
|
MOCK_METHOD3(fuse_reply_attr, int (fuse_req_t req, const struct stat *attr, double attr_timeout));
|
||||||
|
MOCK_METHOD1(fuse_req_ctx, const struct fuse_ctx *(fuse_req_t req));
|
||||||
|
MOCK_METHOD2(fuse_reply_entry, int (fuse_req_t req, const struct fuse_entry_param *e));
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,34 @@
|
|||||||
|
#include "webfuse/mocks/mock_jsonrpc_proxy.hpp"
|
||||||
|
#include "webfuse/utils/wrap.hpp"
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
static webfuse_test::MockJsonRpcProxy * webfuse_test_MockJsonRpcProxy = nullptr;
|
||||||
|
|
||||||
|
WF_WRAP_VFUNC5(webfuse_test_MockJsonRpcProxy, void, wf_jsonrpc_proxy_vinvoke,
|
||||||
|
struct wf_jsonrpc_proxy *,
|
||||||
|
wf_jsonrpc_proxy_finished_fn *,
|
||||||
|
void *,
|
||||||
|
char const *,
|
||||||
|
char const *);
|
||||||
|
|
||||||
|
WF_WRAP_VFUNC3(webfuse_test_MockJsonRpcProxy, void, wf_jsonrpc_proxy_vnotify,
|
||||||
|
struct wf_jsonrpc_proxy *,
|
||||||
|
char const *,
|
||||||
|
char const *);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
MockJsonRpcProxy::MockJsonRpcProxy()
|
||||||
|
{
|
||||||
|
webfuse_test_MockJsonRpcProxy = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
MockJsonRpcProxy::~MockJsonRpcProxy()
|
||||||
|
{
|
||||||
|
webfuse_test_MockJsonRpcProxy = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef MOCK_JSONRPC_PROXY_HPP
|
||||||
|
#define MOCK_JSONRPC_PROXY_HPP
|
||||||
|
|
||||||
|
#include "webfuse/core/jsonrpc/proxy_intern.h"
|
||||||
|
#include <gmock/gmock.h>
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
class MockJsonRpcProxy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MockJsonRpcProxy();
|
||||||
|
virtual ~MockJsonRpcProxy();
|
||||||
|
MOCK_METHOD5(wf_jsonrpc_proxy_vinvoke, void (
|
||||||
|
struct wf_jsonrpc_proxy * proxy,
|
||||||
|
wf_jsonrpc_proxy_finished_fn * finished,
|
||||||
|
void * user_data,
|
||||||
|
char const * method_name,
|
||||||
|
char const * param_info));
|
||||||
|
MOCK_METHOD3(wf_jsonrpc_proxy_vnotify, void (
|
||||||
|
struct wf_jsonrpc_proxy * proxy,
|
||||||
|
char const * method_name,
|
||||||
|
char const * param_info));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,27 @@
|
|||||||
|
#include "webfuse/mocks/mock_operation_context.hpp"
|
||||||
|
#include "webfuse/utils/wrap.hpp"
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
static webfuse_test::MockOperationContext * webfuse_test_MockOperationContext = nullptr;
|
||||||
|
|
||||||
|
WF_WRAP_FUNC1(webfuse_test_MockOperationContext,
|
||||||
|
struct wf_jsonrpc_proxy *, wf_impl_operation_context_get_proxy,
|
||||||
|
struct wf_impl_operation_context *);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace webfuse_test
|
||||||
|
{
|
||||||
|
|
||||||
|
MockOperationContext::MockOperationContext()
|
||||||
|
{
|
||||||
|
webfuse_test_MockOperationContext = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
MockOperationContext::~MockOperationContext()
|
||||||
|
{
|
||||||
|
webfuse_test_MockOperationContext = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue