Add protocol module API library
This commit is contained in:
parent
77199be682
commit
7d4283f8f5
7 changed files with 71 additions and 7 deletions
|
@ -2,3 +2,4 @@ cmake_minimum_required(VERSION 2.8.3)
|
||||||
project(GMRF C)
|
project(GMRF C)
|
||||||
|
|
||||||
add_subdirectory(mmss)
|
add_subdirectory(mmss)
|
||||||
|
add_subdirectory(mmss-protocol)
|
||||||
|
|
|
@ -59,7 +59,11 @@ size_t gmrf_iface_get_mtu(gmrf_t *gmrf, gmrf_iface_t *iface);
|
||||||
bool gmrf_iface_send(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len, const gmrf_addr_t *dest);
|
bool gmrf_iface_send(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len, const gmrf_addr_t *dest);
|
||||||
bool gmrf_iface_send_bc(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len);
|
bool gmrf_iface_send_bc(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len);
|
||||||
|
|
||||||
gmrf_context_t* gmrf_init(gmrf_t *gmrf);
|
/* implemented by protocol */
|
||||||
void gmrf_handle_packet(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface, const gmrf_addr_t *source, const void *data, size_t len);
|
extern const char *gmrf_protocol_name;
|
||||||
|
extern const char *gmrf_protocol_version;
|
||||||
|
|
||||||
|
gmrf_context_t* gmrf_protocol_init(gmrf_t *gmrf);
|
||||||
|
void gmrf_protocol_handle_packet(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface, const gmrf_addr_t *source, const void *data, size_t len);
|
||||||
|
|
||||||
#endif /* _GMRF_GMRF_H_ */
|
#endif /* _GMRF_GMRF_H_ */
|
||||||
|
|
|
@ -31,8 +31,8 @@
|
||||||
|
|
||||||
|
|
||||||
typedef struct mmss_protocol {
|
typedef struct mmss_protocol {
|
||||||
const char *name;
|
const char* (*get_name)(void);
|
||||||
const char *version;
|
const char* (*get_version)(void);
|
||||||
|
|
||||||
gmrf_context_t* (*init)(gmrf_t *gmrf);
|
gmrf_context_t* (*init)(gmrf_t *gmrf);
|
||||||
void (*handle_packet)(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface, const gmrf_addr_t *source, const void *data, size_t len);
|
void (*handle_packet)(gmrf_t *gmrf, gmrf_context_t *ctx, gmrf_iface_t *iface, const gmrf_addr_t *source, const void *data, size_t len);
|
||||||
|
|
6
mmss-protocol/CMakeLists.txt
Normal file
6
mmss-protocol/CMakeLists.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
include_directories(${GMRF_SOURCE_DIR}/include)
|
||||||
|
|
||||||
|
add_library(mmss_protocol STATIC
|
||||||
|
mmss_protocol.c
|
||||||
|
)
|
||||||
|
set_target_properties(mmss_protocol PROPERTIES COMPILE_FLAGS "-fPIC")
|
44
mmss-protocol/mmss_protocol.c
Normal file
44
mmss-protocol/mmss_protocol.c
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2013, Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <mmss/protocol.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const char* get_name(void) {
|
||||||
|
return gmrf_protocol_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* get_version(void) {
|
||||||
|
return gmrf_protocol_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
const mmss_protocol_t mmss_protocol_info = {
|
||||||
|
.get_name = get_name,
|
||||||
|
.get_version = get_version,
|
||||||
|
|
||||||
|
.init = gmrf_protocol_init,
|
||||||
|
.handle_packet = gmrf_protocol_handle_packet,
|
||||||
|
};
|
13
mmss/mmss.c
13
mmss/mmss.c
|
@ -39,11 +39,20 @@ static void init_nodes(gmrf_t *nodes) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "usage: %s protocol_module\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const mmss_protocol_t *proto = mmss_load_protocol(argv[1]);
|
||||||
|
if (!proto)
|
||||||
|
return 1;
|
||||||
|
|
||||||
mmss_t mmss = { .now = 0 };
|
mmss_t mmss = { .now = 0 };
|
||||||
|
|
||||||
mmss_network_t net = { .mtu = 1500 };
|
mmss_network_t net = { .mtu = 1500 };
|
||||||
gmrf_t node1 = { .mmss = &mmss }, node2 = { .mmss = &mmss };
|
gmrf_t node1 = { .mmss = &mmss, .proto = proto }, node2 = { .mmss = &mmss, .proto = proto };
|
||||||
gmrf_iface_t iface1 = {}, iface2 = {};
|
gmrf_iface_t iface1 = {}, iface2 = {};
|
||||||
|
|
||||||
iface1.net = &net;
|
iface1.net = &net;
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct gmrf {
|
||||||
gmrf_context_t *ctx;
|
gmrf_context_t *ctx;
|
||||||
gmrf_iface_t *interfaces;
|
gmrf_iface_t *interfaces;
|
||||||
|
|
||||||
mmss_protocol_t *proto;
|
const mmss_protocol_t *proto;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gmrf_iface {
|
struct gmrf_iface {
|
||||||
|
|
Reference in a new issue