summaryrefslogtreecommitdiffstats
path: root/mmss/gmrf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/gmrf.cpp')
-rw-r--r--mmss/gmrf.cpp40
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);
}