X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink%2B%2B.h;h=6a3841663bc95473f6952178b1564e551d561264;hb=1797680356b8a9256fd233a126f0b4cae9d52b17;hp=a949f761e935436f8baabdd3699ff7176f1671cc;hpb=0bdce44687a22c8825695cba185b845f5ea5e060;p=meshlink diff --git a/src/meshlink++.h b/src/meshlink++.h index a949f761..6a384166 100644 --- a/src/meshlink++.h +++ b/src/meshlink++.h @@ -139,8 +139,10 @@ public: */ bool open(const char *confbase, const char *name, const char *appname, dev_class_t devclass) { handle = meshlink_open(confbase, name, appname, devclass); - if(handle) + + if(handle) { handle->priv = this; + } return isOpen(); } @@ -159,6 +161,7 @@ public: handle->priv = 0; meshlink_close(handle); } + handle = 0; } @@ -575,48 +578,62 @@ private: /// static callback trampolines: static void receive_trampoline(meshlink_handle_t *handle, meshlink_node_t *source, const void *data, size_t length) { - if(!(handle->priv)) + if(!(handle->priv)) { return; + } + meshlink::mesh *that = static_cast(handle->priv); that->receive(static_cast(source), data, length); } static void node_status_trampoline(meshlink_handle_t *handle, meshlink_node_t *peer, bool reachable) { - if(!(handle->priv)) + if(!(handle->priv)) { return; + } + meshlink::mesh *that = static_cast(handle->priv); that->node_status(static_cast(peer), reachable); } static void log_trampoline(meshlink_handle_t *handle, log_level_t level, const char *message) { - if(!(handle->priv)) + if(!(handle->priv)) { return; + } + meshlink::mesh *that = static_cast(handle->priv); that->log(level, message); } static bool channel_accept_trampoline(meshlink_handle_t *handle, meshlink_channel *channel, uint16_t port, const void *data, size_t len) { - if(!(handle->priv)) + if(!(handle->priv)) { return false; + } + meshlink::mesh *that = static_cast(handle->priv); bool accepted = that->channel_accept(static_cast(channel), port, data, len); + if(accepted) { meshlink_set_channel_receive_cb(handle, channel, &channel_receive_trampoline); meshlink_set_channel_poll_cb(handle, channel, &channel_poll_trampoline); } + return accepted; } static void channel_receive_trampoline(meshlink_handle_t *handle, meshlink_channel *channel, const void *data, size_t len) { - if(!(handle->priv)) + if(!(handle->priv)) { return; + } + meshlink::mesh *that = static_cast(handle->priv); that->channel_receive(static_cast(channel), data, len); } static void channel_poll_trampoline(meshlink_handle_t *handle, meshlink_channel *channel, size_t len) { - if(!(handle->priv)) + if(!(handle->priv)) { return; + } + meshlink::mesh *that = static_cast(handle->priv); that->channel_poll(static_cast(channel), len); } @@ -624,7 +641,7 @@ private: meshlink_handle_t *handle; }; -static const char *strerror(errno_t err = meshlink_errno) { +static inline const char *strerror(errno_t err = meshlink_errno) { return meshlink_strerror(err); } @@ -638,7 +655,7 @@ static const char *strerror(errno_t err = meshlink_errno) { * * @return This function will return true if the MeshLink instance was succesfully destroyed, false otherwise. */ -static bool destroy(const char *confbase) { +static inline bool destroy(const char *confbase) { return meshlink_destroy(confbase); } }