diff options
Diffstat (limited to 'mmss/gmrf.cpp')
-rw-r--r-- | mmss/gmrf.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/mmss/gmrf.cpp b/mmss/gmrf.cpp index 1eaa656..0fc8527 100644 --- a/mmss/gmrf.cpp +++ b/mmss/gmrf.cpp @@ -24,31 +24,33 @@ */ +#include "iface.hpp" #include "mmss.hpp" +#include "node.hpp" -#include <cassert> +using namespace MMSS; extern "C" { gmrf_addr_t gmrf_iface_get_addr(gmrf_t *gmrf, gmrf_iface_t *iface) { - return iface->address; + return *(static_cast<iface_t*>(iface)->get_address()); } const char* gmrf_iface_get_name(gmrf_t *gmrf, gmrf_iface_t *iface) { - return iface->name.c_str(); + return static_cast<iface_t*>(iface)->get_name().c_str(); } size_t gmrf_iface_get_mtu(gmrf_t *gmrf, gmrf_iface_t *iface) { - return iface->net->mtu; + return static_cast<iface_t*>(iface)->get_network()->mtu; } bool gmrf_iface_send(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len, const gmrf_addr_t *dest) { - auto src_iface = iface->shared_from_this(); + auto src_iface = static_cast<iface_t*>(iface)->shared_from_this(); - for (auto dest_iface : src_iface->net->interfaces) { - if (gmrf_addr_equal(&dest_iface->address, dest)) { - MMSS::enqueue(gmrf->mmss, src_iface, dest_iface, data, len); + for (auto dest_iface : src_iface->get_network()->interfaces) { + if (gmrf_addr_equal(dest_iface->get_address(), dest)) { + enqueue(static_cast<node_t*>(gmrf)->get_context(), src_iface, dest_iface, data, len); break; } } @@ -57,30 +59,30 @@ bool gmrf_iface_send(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t } bool gmrf_iface_send_bc(gmrf_t *gmrf, gmrf_iface_t *iface, const void *data, size_t len) { - auto src_iface = iface->shared_from_this(); + auto src_iface = static_cast<iface_t*>(iface)->shared_from_this(); - for (auto dest_iface : src_iface->net->interfaces) { + for (auto dest_iface : src_iface->get_network()->interfaces) { if (dest_iface != src_iface) - MMSS::enqueue(gmrf->mmss, src_iface, dest_iface, data, len); + enqueue(static_cast<node_t*>(gmrf)->get_context(), src_iface, dest_iface, data, len); } return true; } void gmrf_schedule(gmrf_t *gmrf, gmrf_scheduled_func f, void *arg, unsigned delay) { - auto node = gmrf->shared_from_this(); + node_t *node = static_cast<node_t*>(gmrf); - std::shared_ptr<MMSS::scheduled_t> scheduled = std::make_shared<MMSS::scheduled_t>(); + std::shared_ptr<scheduled_t> scheduled = std::make_shared<scheduled_t>(); - scheduled->node = std::move(node); + scheduled->node = node->shared_from_this(); scheduled->f = f; scheduled->arg = arg; - gmrf->mmss->event_queue.put(std::move(scheduled), gmrf->mmss->now()+delay); + node->get_context()->event_queue.put(std::move(scheduled), node->get_context()->now()+delay); } gmrf_time_t gmrf_now(gmrf_t *gmrf) { - return gmrf->mmss->now(); + return static_cast<node_t*>(gmrf)->get_context()->now(); } void gmrf_random_bytes(gmrf_t *gmrf, void *buffer, size_t len) { @@ -88,13 +90,15 @@ void gmrf_random_bytes(gmrf_t *gmrf, void *buffer, size_t len) { size_t i; for (i = 0; i < len; i++) - data[i] = rand_r(&gmrf->rand_seed); + data[i] = static_cast<node_t*>(gmrf)->random_byte(); } void gmrf_logf(gmrf_t *gmrf, int priority, const char *format, ...) { + node_t *node = static_cast<node_t*>(gmrf); + va_list ap; va_start(ap, format); - gmrf->mmss->vlogf_orig(gmrf, priority, format, ap); + node->get_context()->vlogf_orig(node, priority, format, ap); va_end(ap); } |