mirror of
https://github.com/haiwen/libsearpc.git
synced 2025-08-12 01:41:33 +00:00
Improve coding
Merge branch 'outside-build' Conflicts: lib/rpc_table.py lib/searpc-server.c
This commit is contained in:
commit
f2b0236d40
@ -1,12 +1,19 @@
|
|||||||
|
generated_sources = searpc-signature.h searpc-marshal.h
|
||||||
|
|
||||||
AM_CFLAGS = @GLIB_CFLAGS@ \
|
AM_CFLAGS = @GLIB_CFLAGS@ \
|
||||||
-I${top_srcdir}/lib
|
-I${top_srcdir}/lib \
|
||||||
|
-I${top_srcdir}/json-glib
|
||||||
|
|
||||||
|
# we need to generate the first
|
||||||
|
BUILT_SOURCES = gensource
|
||||||
|
|
||||||
noinst_PROGRAMS = searpc-demo-server searpc-demo-client searpc-async-client
|
noinst_PROGRAMS = searpc-demo-server searpc-demo-client searpc-async-client
|
||||||
|
|
||||||
searpc_demo_server_SOURCES = searpc-demo-server.c searpc-demo-packet.h
|
searpc_demo_server_SOURCES = searpc-demo-server.c searpc-demo-packet.h
|
||||||
|
|
||||||
searpc_demo_server_LDADD = ${top_builddir}/lib/libsearpc.la @LIB_WS32@ \
|
searpc_demo_server_LDADD = ${top_builddir}/lib/libsearpc.la @LIB_WS32@ \
|
||||||
@GLIB_CFLAGS@
|
@GLIB_CFLAGS@ \
|
||||||
|
${top_builddir}/json-glib/json-glib/libsearpc-json-glib.la
|
||||||
|
|
||||||
searpc_demo_client_SOURCES = searpc-demo-client.c searpc-demo-packet.h
|
searpc_demo_client_SOURCES = searpc-demo-client.c searpc-demo-packet.h
|
||||||
|
|
||||||
@ -18,3 +25,15 @@ searpc_async_client_SOURCES = demo-async-client.c searpc-demo-packet.h
|
|||||||
searpc_async_client_LDADD = ${top_builddir}/lib/libsearpc.la @LIB_WS32@ \
|
searpc_async_client_LDADD = ${top_builddir}/lib/libsearpc.la @LIB_WS32@ \
|
||||||
@GLIB_CFLAGS@
|
@GLIB_CFLAGS@
|
||||||
|
|
||||||
|
EXTRA_DIST = rpc_table.py
|
||||||
|
|
||||||
|
gensource: ${generated_sources}
|
||||||
|
|
||||||
|
${generated_sources}: rpc_table.py
|
||||||
|
@echo "[libsearpc]: generating rpc header files"
|
||||||
|
python ${top_srcdir}/lib/searpc-codegen.py rpc_table.py
|
||||||
|
@echo "[libsearpc]: done"
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
-rm ${generated_sources}
|
||||||
|
|
||||||
|
@ -2,12 +2,11 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
#include "searpc-client.h"
|
#include <searpc.h>
|
||||||
|
|
||||||
#include "searpc-demo-packet.h"
|
#include "searpc-demo-packet.h"
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
8
demo/rpc_table.py
Normal file
8
demo/rpc_table.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
"""
|
||||||
|
Define RPC functions needed to generate
|
||||||
|
"""
|
||||||
|
|
||||||
|
# [ <ret-type>, [<arg_types>] ]
|
||||||
|
func_table = [
|
||||||
|
[ "int", ["string"] ],
|
||||||
|
]
|
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
#include "searpc-client.h"
|
#include <searpc.h>
|
||||||
|
|
||||||
#include "searpc-demo-packet.h"
|
#include "searpc-demo-packet.h"
|
||||||
|
|
||||||
#define BUFLEN 256
|
#define BUFLEN 256
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
#include "searpc-server.h"
|
#include <searpc.h>
|
||||||
|
|
||||||
#include "searpc-demo-packet.h"
|
#include "searpc-demo-packet.h"
|
||||||
#define BUFLEN 256
|
#define BUFLEN 256
|
||||||
|
|
||||||
@ -31,10 +32,13 @@ searpc_strlen(const char *str)
|
|||||||
return strlen(str);
|
return strlen(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "searpc-signature.h"
|
||||||
|
#include "searpc-marshal.h"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
start_rpc_service(void)
|
start_rpc_service(void)
|
||||||
{
|
{
|
||||||
searpc_server_init();
|
searpc_server_init(register_marshals);
|
||||||
searpc_create_service("searpc-demo");
|
searpc_create_service("searpc-demo");
|
||||||
|
|
||||||
/* The first parameter is the implementation function.
|
/* The first parameter is the implementation function.
|
||||||
|
@ -4,30 +4,20 @@
|
|||||||
# Used in server:
|
# Used in server:
|
||||||
#
|
#
|
||||||
# * searpc-signature.h: contains functions like `searpc_signature_int__string()`.
|
# * searpc-signature.h: contains functions like `searpc_signature_int__string()`.
|
||||||
# * marshal.h: contains functions like `marshal_int__string()`
|
# * searpc-marshal.h: contains functions like `marshal_int__string()`
|
||||||
#
|
#
|
||||||
|
|
||||||
generated_sources = searpc-signature.h marshal.h
|
|
||||||
|
|
||||||
# rpc_headers = fcall-impr.h searpc-fcall.h searpc-dfun.h searpc-signature.h searpc-marshal.h
|
|
||||||
|
|
||||||
AM_CFLAGS = @GLIB_CFLAGS@ \
|
AM_CFLAGS = @GLIB_CFLAGS@ \
|
||||||
-I${top_builddir}/lib \
|
-I${top_builddir}/lib \
|
||||||
-I${top_srcdir}/json-glib \
|
-I${top_srcdir}/json-glib \
|
||||||
-I${top_srcdir}/lib \
|
-I${top_srcdir}/lib \
|
||||||
-DG_LOG_DOMAIN=\"Searpc\"
|
-DG_LOG_DOMAIN=\"Searpc\"
|
||||||
|
|
||||||
# we need to generate the first
|
|
||||||
BUILT_SOURCES = gensource
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = libsearpc.la
|
lib_LTLIBRARIES = libsearpc.la
|
||||||
|
|
||||||
include_HEADERS = searpc-client.h \
|
include_HEADERS = searpc-client.h searpc-server.h searpc-utils.h searpc.h
|
||||||
searpc-server.h searpc-signature.h searpc-utils.h
|
|
||||||
|
|
||||||
noinst_HEADERS = searpc-utils.h marshal.h
|
libsearpc_la_SOURCES = searpc-client.c searpc-server.c
|
||||||
|
|
||||||
libsearpc_la_SOURCES = searpc-client.c searpc-server.c $(generated_sources)
|
|
||||||
|
|
||||||
libsearpc_la_LDFLAGS = -version-info 1:2:0 -no-undefined
|
libsearpc_la_LDFLAGS = -version-info 1:2:0 -no-undefined
|
||||||
|
|
||||||
@ -35,14 +25,3 @@ libsearpc_la_LIBADD = @GLIB_LIBS@ \
|
|||||||
${top_builddir}/json-glib/json-glib/libsearpc-json-glib.la
|
${top_builddir}/json-glib/json-glib/libsearpc-json-glib.la
|
||||||
|
|
||||||
dist_bin_SCRIPTS = searpc-codegen.py
|
dist_bin_SCRIPTS = searpc-codegen.py
|
||||||
|
|
||||||
EXTRA_DIST = rpc_table.py
|
|
||||||
|
|
||||||
gensource: ${generated_sources}
|
|
||||||
|
|
||||||
${generated_sources}: searpc-codegen.py rpc_table.py
|
|
||||||
@echo "[libsearpc]: generating rpc header files"
|
|
||||||
python searpc-codegen.py rpc_table.py
|
|
||||||
@echo "[libsearpc]: done"
|
|
||||||
|
|
||||||
DISTCLEANFILES = ${generated_sources}
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
"""
|
|
||||||
Define RPC functions needed to generate
|
|
||||||
"""
|
|
||||||
|
|
||||||
# [ <ret-type>, [<arg_types>] ]
|
|
||||||
func_table = [
|
|
||||||
[ "int", [] ],
|
|
||||||
[ "int", ["int"] ],
|
|
||||||
[ "int", ["int", "int"] ],
|
|
||||||
[ "int", ["int", "string"] ],
|
|
||||||
[ "int", ["int", "string", "string"] ],
|
|
||||||
[ "int", ["int", "string", "int"] ],
|
|
||||||
[ "int", ["int", "string", "int", "int"] ],
|
|
||||||
[ "int", ["string"] ],
|
|
||||||
[ "int", ["string", "int"] ],
|
|
||||||
[ "int", ["string", "int", "string"] ],
|
|
||||||
[ "int", ["string", "int", "string", "string"] ],
|
|
||||||
[ "int", ["string", "string"] ],
|
|
||||||
[ "int", ["string", "string", "string"] ],
|
|
||||||
[ "int", ["string", "string", "int", "int"] ],
|
|
||||||
[ "int", ["string", "string", "string", "string"] ],
|
|
||||||
[ "int", ["string", "string", "string", "string", "string"] ],
|
|
||||||
[ "int64", [] ],
|
|
||||||
[ "int64", ["string"] ],
|
|
||||||
[ "string", [] ],
|
|
||||||
[ "string", ["int"] ],
|
|
||||||
[ "string", ["string"] ],
|
|
||||||
[ "string", ["string", "int"] ],
|
|
||||||
[ "string", ["string", "string"] ],
|
|
||||||
[ "string", ["string", "string", "string"] ],
|
|
||||||
[ "string", ["string", "string", "string", "string"] ],
|
|
||||||
[ "string", ["string", "string", "string", "string", "int"] ],
|
|
||||||
[ "string", ["string", "string", "string", "string", "string"] ],
|
|
||||||
[ "string", ["string", "string", "string", "string", "string", "string"] ],
|
|
||||||
[ "string", ["string", "string", "string", "string", "string", "int"] ],
|
|
||||||
[ "objlist", [] ],
|
|
||||||
[ "objlist", ["int"] ],
|
|
||||||
[ "objlist", ["int", "int"] ],
|
|
||||||
[ "objlist", ["int", "int", "int"] ],
|
|
||||||
[ "objlist", ["string"] ],
|
|
||||||
[ "objlist", ["string", "int"] ],
|
|
||||||
[ "objlist", ["string", "int", "int"] ],
|
|
||||||
[ "objlist", ["string", "string"] ],
|
|
||||||
[ "objlist", ["string", "string", "string"] ],
|
|
||||||
[ "objlist", ["string", "string", "int"] ],
|
|
||||||
[ "objlist", ["string", "string", "int", "int"] ],
|
|
||||||
[ "object", [] ],
|
|
||||||
[ "object", ["int"] ],
|
|
||||||
[ "object", ["string"] ],
|
|
||||||
[ "object", ["string", "string"] ],
|
|
||||||
]
|
|
@ -6,6 +6,7 @@ Generate function define macros.
|
|||||||
|
|
||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
# type -> (<c type if used as parameter>, <c type if used as ret type>,
|
# type -> (<c type if used as parameter>, <c type if used as ret type>,
|
||||||
@ -17,31 +18,31 @@ type_table = {
|
|||||||
"string": ("const gchar*",
|
"string": ("const gchar*",
|
||||||
"gchar*",
|
"gchar*",
|
||||||
"json_array_get_string_or_null_element",
|
"json_array_get_string_or_null_element",
|
||||||
"set_string_to_ret_object",
|
"searpc_set_string_to_ret_object",
|
||||||
"json_array_add_string_or_null_element",
|
"json_array_add_string_or_null_element",
|
||||||
"NULL"),
|
"NULL"),
|
||||||
"int": ("int",
|
"int": ("int",
|
||||||
"int",
|
"int",
|
||||||
"json_array_get_int_element",
|
"json_array_get_int_element",
|
||||||
"set_int_to_ret_object",
|
"searpc_set_int_to_ret_object",
|
||||||
"json_array_add_int_element",
|
"json_array_add_int_element",
|
||||||
"-1"),
|
"-1"),
|
||||||
"int64": ("gint64",
|
"int64": ("gint64",
|
||||||
"gint64",
|
"gint64",
|
||||||
"json_array_get_int_element",
|
"json_array_get_int_element",
|
||||||
"set_int_to_ret_object",
|
"searpc_set_int_to_ret_object",
|
||||||
"json_array_add_int_element",
|
"json_array_add_int_element",
|
||||||
"-1"),
|
"-1"),
|
||||||
"object": ("GObject*",
|
"object": ("GObject*",
|
||||||
"GObject*",
|
"GObject*",
|
||||||
"",
|
"",
|
||||||
"set_object_to_ret_object",
|
"searpc_set_object_to_ret_object",
|
||||||
"",
|
"",
|
||||||
"NULL"),
|
"NULL"),
|
||||||
"objlist": ("GList*",
|
"objlist": ("GList*",
|
||||||
"GList*",
|
"GList*",
|
||||||
"",
|
"",
|
||||||
"set_objlist_to_ret_object",
|
"searpc_set_objlist_to_ret_object",
|
||||||
"",
|
"",
|
||||||
"NULL"),
|
"NULL"),
|
||||||
}
|
}
|
||||||
@ -56,7 +57,7 @@ ${get_parameters}
|
|||||||
|
|
||||||
JsonObject *object = json_object_new ();
|
JsonObject *object = json_object_new ();
|
||||||
${convert_ret}
|
${convert_ret}
|
||||||
return marshal_set_ret_common (object, ret_len, error);
|
return searpc_marshal_set_ret_common (object, ret_len, error);
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -101,7 +102,7 @@ def generate_marshal(ret_type, arg_types):
|
|||||||
|
|
||||||
def gen_marshal_functions():
|
def gen_marshal_functions():
|
||||||
from rpc_table import func_table
|
from rpc_table import func_table
|
||||||
f = open('marshal.h', 'w')
|
f = open('searpc-marshal.h', 'w')
|
||||||
for item in func_table:
|
for item in func_table:
|
||||||
print >>f, generate_marshal(item[0], item[1])
|
print >>f, generate_marshal(item[0], item[1])
|
||||||
f.close()
|
f.close()
|
||||||
@ -131,7 +132,7 @@ def generate_marshal_register_item(ret_type, arg_types):
|
|||||||
|
|
||||||
def gen_marshal_register_function():
|
def gen_marshal_register_function():
|
||||||
from rpc_table import func_table
|
from rpc_table import func_table
|
||||||
f = open('marshal.h', 'a')
|
f = open('searpc-marshal.h', 'a')
|
||||||
print >>f, "static void register_marshals()"""
|
print >>f, "static void register_marshals()"""
|
||||||
print >>f, "{"
|
print >>f, "{"
|
||||||
for item in func_table:
|
for item in func_table:
|
||||||
@ -173,6 +174,7 @@ def gen_signature_list():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
sys.path.append(os.getcwd())
|
||||||
gen_marshal_functions()
|
gen_marshal_functions()
|
||||||
gen_marshal_register_function()
|
gen_marshal_register_function()
|
||||||
gen_signature_list()
|
gen_signature_list()
|
||||||
|
@ -5,8 +5,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "json-glib/json-glib.h"
|
|
||||||
|
|
||||||
#include "searpc-server.h"
|
#include "searpc-server.h"
|
||||||
#include "searpc-utils.h"
|
#include "searpc-utils.h"
|
||||||
|
|
||||||
@ -87,8 +85,8 @@ searpc_remove_service (const char *svc_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Marshal functions */
|
/* Marshal functions */
|
||||||
static inline void
|
void
|
||||||
set_string_to_ret_object (JsonObject *object, gchar *ret)
|
searpc_set_string_to_ret_object (JsonObject *object, gchar *ret)
|
||||||
{
|
{
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
json_object_set_null_member (object, "ret");
|
json_object_set_null_member (object, "ret");
|
||||||
@ -98,14 +96,14 @@ set_string_to_ret_object (JsonObject *object, gchar *ret)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void
|
||||||
set_int_to_ret_object (JsonObject *object, gint64 ret)
|
searpc_set_int_to_ret_object (JsonObject *object, gint64 ret)
|
||||||
{
|
{
|
||||||
json_object_set_int_member (object, "ret", ret);
|
json_object_set_int_member (object, "ret", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void
|
||||||
set_object_to_ret_object (JsonObject *object, GObject *ret)
|
searpc_set_object_to_ret_object (JsonObject *object, GObject *ret)
|
||||||
{
|
{
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
json_object_set_null_member (object, "ret");
|
json_object_set_null_member (object, "ret");
|
||||||
@ -115,8 +113,8 @@ set_object_to_ret_object (JsonObject *object, GObject *ret)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void
|
||||||
set_objlist_to_ret_object (JsonObject *object, GList *ret)
|
searpc_set_objlist_to_ret_object (JsonObject *object, GList *ret)
|
||||||
{
|
{
|
||||||
GList *ptr;
|
GList *ptr;
|
||||||
|
|
||||||
@ -134,8 +132,8 @@ set_objlist_to_ret_object (JsonObject *object, GList *ret)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
gchar *
|
||||||
marshal_set_ret_common (JsonObject *object, gsize *len, GError *error)
|
searpc_marshal_set_ret_common (JsonObject *object, gsize *len, GError *error)
|
||||||
{
|
{
|
||||||
JsonNode *root = json_node_new (JSON_NODE_OBJECT);
|
JsonNode *root = json_node_new (JSON_NODE_OBJECT);
|
||||||
JsonGenerator *generator = json_generator_new ();
|
JsonGenerator *generator = json_generator_new ();
|
||||||
@ -158,7 +156,7 @@ marshal_set_ret_common (JsonObject *object, gsize *len, GError *error)
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
gchar *
|
||||||
error_to_json (int code, const char *msg, gsize *len)
|
error_to_json (int code, const char *msg, gsize *len)
|
||||||
{
|
{
|
||||||
JsonObject *object = json_object_new ();
|
JsonObject *object = json_object_new ();
|
||||||
@ -181,19 +179,15 @@ error_to_json (int code, const char *msg, gsize *len)
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* include the generated marshal functions */
|
|
||||||
#include "marshal.h"
|
|
||||||
|
|
||||||
void
|
void
|
||||||
searpc_server_init ()
|
searpc_server_init (RegisterMarshalFunc register_func)
|
||||||
{
|
{
|
||||||
marshal_table = g_hash_table_new_full (g_str_hash, g_str_equal,
|
marshal_table = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
NULL, (GDestroyNotify)marshal_item_free);
|
NULL, (GDestroyNotify)marshal_item_free);
|
||||||
service_table = g_hash_table_new_full (g_str_hash, g_str_equal,
|
service_table = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
NULL, (GDestroyNotify)service_free);
|
NULL, (GDestroyNotify)service_free);
|
||||||
|
|
||||||
/* register buildin marshal functions */
|
register_func ();
|
||||||
register_marshals();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define SEARPC_SERVER_H
|
#define SEARPC_SERVER_H
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <json-glib/json-glib.h>
|
||||||
|
|
||||||
#ifndef DFT_DOMAIN
|
#ifndef DFT_DOMAIN
|
||||||
#define DFT_DOMAIN g_quark_from_string(G_LOG_DOMAIN)
|
#define DFT_DOMAIN g_quark_from_string(G_LOG_DOMAIN)
|
||||||
@ -10,13 +11,20 @@
|
|||||||
struct _JsonArray;
|
struct _JsonArray;
|
||||||
typedef gchar* (*SearpcMarshalFunc) (void *func, struct _JsonArray *param_array,
|
typedef gchar* (*SearpcMarshalFunc) (void *func, struct _JsonArray *param_array,
|
||||||
gsize *ret_len);
|
gsize *ret_len);
|
||||||
|
typedef void (*RegisterMarshalFunc) (void);
|
||||||
|
|
||||||
|
void searpc_set_string_to_ret_object (JsonObject *object, gchar *ret);
|
||||||
|
void searpc_set_int_to_ret_object (JsonObject *object, gint64 ret);
|
||||||
|
void searpc_set_object_to_ret_object (JsonObject *object, GObject *ret);
|
||||||
|
void searpc_set_objlist_to_ret_object (JsonObject *object, GList *ret);
|
||||||
|
gchar *searpc_marshal_set_ret_common (JsonObject *object, gsize *len, GError *error);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* searpc_server_init:
|
* searpc_server_init:
|
||||||
*
|
*
|
||||||
* Inititalize searpc server.
|
* Inititalize searpc server.
|
||||||
*/
|
*/
|
||||||
void searpc_server_init ();
|
void searpc_server_init (RegisterMarshalFunc register_func);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* searpc_server_final:
|
* searpc_server_final:
|
||||||
@ -89,7 +97,4 @@ gchar *searpc_server_call_function (const char *service,
|
|||||||
*/
|
*/
|
||||||
char* searpc_compute_signature (gchar *ret_type, int pnum, ...);
|
char* searpc_compute_signature (gchar *ret_type, int pnum, ...);
|
||||||
|
|
||||||
/* Signatures */
|
|
||||||
#include <searpc-signature.h>
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
10
lib/searpc.h
Normal file
10
lib/searpc.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
|
||||||
|
#ifndef SEARPC_H
|
||||||
|
#define SEARPC_H
|
||||||
|
|
||||||
|
#include <searpc-client.h>
|
||||||
|
#include <searpc-server.h>
|
||||||
|
#include <searpc-utils.h>
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user