mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-07 16:33:08 +00:00
libwaku better params validation and a bit more clarity (#3005)
This commit is contained in:
parent
236547ec7d
commit
191035ffd2
2
Makefile
2
Makefile
@ -427,6 +427,7 @@ cwaku_example: | build libwaku
|
|||||||
./examples/cbindings/base64.c \
|
./examples/cbindings/base64.c \
|
||||||
-lwaku -Lbuild/ \
|
-lwaku -Lbuild/ \
|
||||||
-pthread -ldl -lm \
|
-pthread -ldl -lm \
|
||||||
|
-lnegentropy -Lvendor/negentropy/cpp/ \
|
||||||
-lminiupnpc -Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ \
|
-lminiupnpc -Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ \
|
||||||
-lnatpmp -Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream/ \
|
-lnatpmp -Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream/ \
|
||||||
vendor/nim-libbacktrace/libbacktrace_wrapper.o \
|
vendor/nim-libbacktrace/libbacktrace_wrapper.o \
|
||||||
@ -439,6 +440,7 @@ cppwaku_example: | build libwaku
|
|||||||
./examples/cpp/base64.cpp \
|
./examples/cpp/base64.cpp \
|
||||||
-lwaku -Lbuild/ \
|
-lwaku -Lbuild/ \
|
||||||
-pthread -ldl -lm \
|
-pthread -ldl -lm \
|
||||||
|
-lnegentropy -Lvendor/negentropy/cpp/ \
|
||||||
-lminiupnpc -Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ \
|
-lminiupnpc -Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ \
|
||||||
-lnatpmp -Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream/ \
|
-lnatpmp -Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream/ \
|
||||||
vendor/nim-libbacktrace/libbacktrace_wrapper.o \
|
vendor/nim-libbacktrace/libbacktrace_wrapper.o \
|
||||||
|
|||||||
@ -1,3 +1,11 @@
|
|||||||
|
import ./waku_thread/waku_thread
|
||||||
|
|
||||||
type WakuCallBack* = proc(
|
type WakuCallBack* = proc(
|
||||||
callerRet: cint, msg: ptr cchar, len: csize_t, userData: pointer
|
callerRet: cint, msg: ptr cchar, len: csize_t, userData: pointer
|
||||||
) {.cdecl, gcsafe, raises: [].}
|
) {.cdecl, gcsafe, raises: [].}
|
||||||
|
|
||||||
|
template checkLibwakuParams*(ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer) =
|
||||||
|
ctx[].userData = userData
|
||||||
|
|
||||||
|
if isNil(callback):
|
||||||
|
return RET_MISSING_CALLBACK
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
when defined(linux):
|
when defined(linux):
|
||||||
{.passl: "-Wl,-soname,libwaku.so".}
|
{.passl: "-Wl,-soname,libwaku.so".}
|
||||||
|
|
||||||
import std/[json, sequtils, atomics, times, strformat, options, atomics, strutils, os]
|
import std/[json, sequtils, atomics, strformat, options, atomics]
|
||||||
import chronicles, chronos
|
import chronicles, chronos
|
||||||
import
|
import
|
||||||
waku/common/base64,
|
waku/common/base64,
|
||||||
@ -52,7 +52,7 @@ template foreignThreadGc(body: untyped) =
|
|||||||
when declared(tearDownForeignThreadGc):
|
when declared(tearDownForeignThreadGc):
|
||||||
tearDownForeignThreadGc()
|
tearDownForeignThreadGc()
|
||||||
|
|
||||||
proc relayEventCallback(ctx: ptr Context): WakuRelayHandler =
|
proc relayEventCallback(ctx: ptr WakuContext): WakuRelayHandler =
|
||||||
return proc(
|
return proc(
|
||||||
pubsubTopic: PubsubTopic, msg: WakuMessage
|
pubsubTopic: PubsubTopic, msg: WakuMessage
|
||||||
): Future[system.void] {.async.} =
|
): Future[system.void] {.async.} =
|
||||||
@ -144,10 +144,9 @@ proc waku_new(
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
proc waku_destroy(
|
proc waku_destroy(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
if isNil(callback):
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
waku_thread.stopWakuThread(ctx).isOkOr:
|
waku_thread.stopWakuThread(ctx).isOkOr:
|
||||||
foreignThreadGc:
|
foreignThreadGc:
|
||||||
@ -158,12 +157,9 @@ proc waku_destroy(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_version(
|
proc waku_version(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
foreignThreadGc:
|
foreignThreadGc:
|
||||||
callback(
|
callback(
|
||||||
@ -176,13 +172,13 @@ proc waku_version(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_set_event_callback(
|
proc waku_set_event_callback(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
) {.dynlib, exportc.} =
|
) {.dynlib, exportc.} =
|
||||||
ctx[].eventCallback = cast[pointer](callback)
|
ctx[].eventCallback = cast[pointer](callback)
|
||||||
ctx[].eventUserData = userData
|
ctx[].eventUserData = userData
|
||||||
|
|
||||||
proc waku_content_topic(
|
proc waku_content_topic(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
appName: cstring,
|
appName: cstring,
|
||||||
appVersion: cuint,
|
appVersion: cuint,
|
||||||
contentTopicName: cstring,
|
contentTopicName: cstring,
|
||||||
@ -192,10 +188,7 @@ proc waku_content_topic(
|
|||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
# https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding
|
# https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding
|
||||||
|
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
let appStr = appName.alloc()
|
let appStr = appName.alloc()
|
||||||
let ctnStr = contentTopicName.alloc()
|
let ctnStr = contentTopicName.alloc()
|
||||||
@ -213,14 +206,11 @@ proc waku_content_topic(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_pubsub_topic(
|
proc waku_pubsub_topic(
|
||||||
ctx: ptr Context, topicName: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, topicName: cstring, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc, cdecl.} =
|
): cint {.dynlib, exportc, cdecl.} =
|
||||||
# https://rfc.vac.dev/spec/36/#extern-char-waku_pubsub_topicchar-name-char-encoding
|
# https://rfc.vac.dev/spec/36/#extern-char-waku_pubsub_topicchar-name-char-encoding
|
||||||
|
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
let topicNameStr = topicName.alloc()
|
let topicNameStr = topicName.alloc()
|
||||||
|
|
||||||
@ -234,14 +224,11 @@ proc waku_pubsub_topic(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_default_pubsub_topic(
|
proc waku_default_pubsub_topic(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
# https://rfc.vac.dev/spec/36/#extern-char-waku_default_pubsub_topic
|
# https://rfc.vac.dev/spec/36/#extern-char-waku_default_pubsub_topic
|
||||||
|
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
callback(
|
callback(
|
||||||
RET_OK,
|
RET_OK,
|
||||||
@ -253,7 +240,7 @@ proc waku_default_pubsub_topic(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_relay_publish(
|
proc waku_relay_publish(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
pubSubTopic: cstring,
|
pubSubTopic: cstring,
|
||||||
jsonWakuMessage: cstring,
|
jsonWakuMessage: cstring,
|
||||||
timeoutMs: cuint,
|
timeoutMs: cuint,
|
||||||
@ -262,10 +249,7 @@ proc waku_relay_publish(
|
|||||||
): cint {.dynlib, exportc, cdecl.} =
|
): cint {.dynlib, exportc, cdecl.} =
|
||||||
# https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publishchar-messagejson-char-pubsubtopic-int-timeoutms
|
# https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publishchar-messagejson-char-pubsubtopic-int-timeoutms
|
||||||
|
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
let jwm = jsonWakuMessage.alloc()
|
let jwm = jsonWakuMessage.alloc()
|
||||||
var jsonMessage: JsonMessage
|
var jsonMessage: JsonMessage
|
||||||
@ -315,9 +299,9 @@ proc waku_relay_publish(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_start(
|
proc waku_start(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
## TODO: handle the error
|
## TODO: handle the error
|
||||||
discard waku_thread.sendRequestToWakuThread(
|
discard waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -326,9 +310,10 @@ proc waku_start(
|
|||||||
)
|
)
|
||||||
|
|
||||||
proc waku_stop(
|
proc waku_stop(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
## TODO: handle the error
|
## TODO: handle the error
|
||||||
discard waku_thread.sendRequestToWakuThread(
|
discard waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -337,9 +322,12 @@ proc waku_stop(
|
|||||||
)
|
)
|
||||||
|
|
||||||
proc waku_relay_subscribe(
|
proc waku_relay_subscribe(
|
||||||
ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext,
|
||||||
|
pubSubTopic: cstring,
|
||||||
|
callback: WakuCallBack,
|
||||||
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let pst = pubSubTopic.alloc()
|
let pst = pubSubTopic.alloc()
|
||||||
var cb = relayEventCallback(ctx)
|
var cb = relayEventCallback(ctx)
|
||||||
@ -360,9 +348,12 @@ proc waku_relay_subscribe(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_relay_unsubscribe(
|
proc waku_relay_unsubscribe(
|
||||||
ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext,
|
||||||
|
pubSubTopic: cstring,
|
||||||
|
callback: WakuCallBack,
|
||||||
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let pst = pubSubTopic.alloc()
|
let pst = pubSubTopic.alloc()
|
||||||
|
|
||||||
@ -385,9 +376,12 @@ proc waku_relay_unsubscribe(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_relay_get_num_connected_peers(
|
proc waku_relay_get_num_connected_peers(
|
||||||
ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext,
|
||||||
|
pubSubTopic: cstring,
|
||||||
|
callback: WakuCallBack,
|
||||||
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let pst = pubSubTopic.alloc()
|
let pst = pubSubTopic.alloc()
|
||||||
defer:
|
defer:
|
||||||
@ -414,9 +408,12 @@ proc waku_relay_get_num_connected_peers(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_relay_get_num_peers_in_mesh(
|
proc waku_relay_get_num_peers_in_mesh(
|
||||||
ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext,
|
||||||
|
pubSubTopic: cstring,
|
||||||
|
callback: WakuCallBack,
|
||||||
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let pst = pubSubTopic.alloc()
|
let pst = pubSubTopic.alloc()
|
||||||
defer:
|
defer:
|
||||||
@ -443,16 +440,13 @@ proc waku_relay_get_num_peers_in_mesh(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_lightpush_publish(
|
proc waku_lightpush_publish(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
pubSubTopic: cstring,
|
pubSubTopic: cstring,
|
||||||
jsonWakuMessage: cstring,
|
jsonWakuMessage: cstring,
|
||||||
callback: WakuCallBack,
|
callback: WakuCallBack,
|
||||||
userData: pointer,
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc, cdecl.} =
|
): cint {.dynlib, exportc, cdecl.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
let jwm = jsonWakuMessage.alloc()
|
let jwm = jsonWakuMessage.alloc()
|
||||||
let pst = pubSubTopic.alloc()
|
let pst = pubSubTopic.alloc()
|
||||||
@ -498,13 +492,13 @@ proc waku_lightpush_publish(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_connect(
|
proc waku_connect(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
peerMultiAddr: cstring,
|
peerMultiAddr: cstring,
|
||||||
timeoutMs: cuint,
|
timeoutMs: cuint,
|
||||||
callback: WakuCallBack,
|
callback: WakuCallBack,
|
||||||
userData: pointer,
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let connRes = waku_thread.sendRequestToWakuThread(
|
let connRes = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -521,22 +515,19 @@ proc waku_connect(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_store_query(
|
proc waku_store_query(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
jsonQuery: cstring,
|
jsonQuery: cstring,
|
||||||
peerAddr: cstring,
|
peerAddr: cstring,
|
||||||
timeoutMs: cint,
|
timeoutMs: cint,
|
||||||
callback: WakuCallBack,
|
callback: WakuCallBack,
|
||||||
userData: pointer,
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
if isNil(callback):
|
|
||||||
return RET_MISSING_CALLBACK
|
|
||||||
|
|
||||||
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
let sendReqRes = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
RequestType.STORE,
|
RequestType.STORE,
|
||||||
JsonStoreQueryRequest.createShared(jsonQuery, peerAddr, timeoutMs, callback),
|
JsonStoreQueryRequest.createShared(jsonQuery, peerAddr, timeoutMs),
|
||||||
)
|
)
|
||||||
|
|
||||||
if sendReqRes.isErr():
|
if sendReqRes.isErr():
|
||||||
@ -549,9 +540,9 @@ proc waku_store_query(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_listen_addresses(
|
proc waku_listen_addresses(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let connRes = waku_thread.sendRequestToWakuThread(
|
let connRes = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -568,14 +559,14 @@ proc waku_listen_addresses(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_dns_discovery(
|
proc waku_dns_discovery(
|
||||||
ctx: ptr Context,
|
ctx: ptr WakuContext,
|
||||||
entTreeUrl: cstring,
|
entTreeUrl: cstring,
|
||||||
nameDnsServer: cstring,
|
nameDnsServer: cstring,
|
||||||
timeoutMs: cint,
|
timeoutMs: cint,
|
||||||
callback: WakuCallBack,
|
callback: WakuCallBack,
|
||||||
userData: pointer,
|
userData: pointer,
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let bootstrapPeers = waku_thread.sendRequestToWakuThread(
|
let bootstrapPeers = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -593,11 +584,11 @@ proc waku_dns_discovery(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_discv5_update_bootnodes(
|
proc waku_discv5_update_bootnodes(
|
||||||
ctx: ptr Context, bootnodes: cstring, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, bootnodes: cstring, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
## Updates the bootnode list used for discovering new peers via DiscoveryV5
|
## Updates the bootnode list used for discovering new peers via DiscoveryV5
|
||||||
## bootnodes - JSON array containing the bootnode ENRs i.e. `["enr:...", "enr:..."]`
|
## bootnodes - JSON array containing the bootnode ENRs i.e. `["enr:...", "enr:..."]`
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let resp = waku_thread.sendRequestToWakuThread(
|
let resp = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -615,9 +606,9 @@ proc waku_discv5_update_bootnodes(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_get_my_enr(
|
proc waku_get_my_enr(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let connRes = waku_thread.sendRequestToWakuThread(
|
let connRes = waku_thread.sendRequestToWakuThread(
|
||||||
ctx,
|
ctx,
|
||||||
@ -634,9 +625,9 @@ proc waku_get_my_enr(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_start_discv5(
|
proc waku_start_discv5(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let resp = waku_thread.sendRequestToWakuThread(
|
let resp = waku_thread.sendRequestToWakuThread(
|
||||||
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StartRequest()
|
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StartRequest()
|
||||||
@ -651,9 +642,9 @@ proc waku_start_discv5(
|
|||||||
return RET_OK
|
return RET_OK
|
||||||
|
|
||||||
proc waku_stop_discv5(
|
proc waku_stop_discv5(
|
||||||
ctx: ptr Context, callback: WakuCallBack, userData: pointer
|
ctx: ptr WakuContext, callback: WakuCallBack, userData: pointer
|
||||||
): cint {.dynlib, exportc.} =
|
): cint {.dynlib, exportc.} =
|
||||||
ctx[].userData = userData
|
checkLibwakuParams(ctx, callback, userData)
|
||||||
|
|
||||||
let resp = waku_thread.sendRequestToWakuThread(
|
let resp = waku_thread.sendRequestToWakuThread(
|
||||||
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StopRequest()
|
ctx, RequestType.DISCOVERY, DiscoveryRequest.createDiscV5StopRequest()
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import chronos, results
|
|||||||
import
|
import
|
||||||
../../../../../waku/factory/waku,
|
../../../../../waku/factory/waku,
|
||||||
../../../../alloc,
|
../../../../alloc,
|
||||||
../../../../callback,
|
|
||||||
../../../../../waku/waku_core/peers,
|
../../../../../waku/waku_core/peers,
|
||||||
../../../../../waku/waku_core/time,
|
../../../../../waku/waku_core/time,
|
||||||
../../../../../waku/waku_core/message/digest,
|
../../../../../waku/waku_core/message/digest,
|
||||||
@ -18,7 +17,6 @@ type JsonStoreQueryRequest* = object
|
|||||||
jsonQuery: cstring
|
jsonQuery: cstring
|
||||||
peerAddr: cstring
|
peerAddr: cstring
|
||||||
timeoutMs: cint
|
timeoutMs: cint
|
||||||
storeCallback: WakuCallBack
|
|
||||||
|
|
||||||
type StoreRequest* = object
|
type StoreRequest* = object
|
||||||
operation: StoreReqType
|
operation: StoreReqType
|
||||||
@ -99,13 +97,11 @@ proc createShared*(
|
|||||||
jsonQuery: cstring,
|
jsonQuery: cstring,
|
||||||
peerAddr: cstring,
|
peerAddr: cstring,
|
||||||
timeoutMs: cint,
|
timeoutMs: cint,
|
||||||
storeCallback: WakuCallBack = nil,
|
|
||||||
): ptr type T =
|
): ptr type T =
|
||||||
var ret = createShared(T)
|
var ret = createShared(T)
|
||||||
ret[].timeoutMs = timeoutMs
|
ret[].timeoutMs = timeoutMs
|
||||||
ret[].jsonQuery = jsonQuery.alloc()
|
ret[].jsonQuery = jsonQuery.alloc()
|
||||||
ret[].peerAddr = peerAddr.alloc()
|
ret[].peerAddr = peerAddr.alloc()
|
||||||
ret[].storeCallback = storeCallback
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
proc destroyShared(self: ptr JsonStoreQueryRequest) =
|
proc destroyShared(self: ptr JsonStoreQueryRequest) =
|
||||||
|
|||||||
@ -9,8 +9,8 @@ import
|
|||||||
./inter_thread_communication/waku_thread_request,
|
./inter_thread_communication/waku_thread_request,
|
||||||
./inter_thread_communication/waku_thread_response
|
./inter_thread_communication/waku_thread_response
|
||||||
|
|
||||||
type Context* = object
|
type WakuContext* = object
|
||||||
thread: Thread[(ptr Context)]
|
thread: Thread[(ptr WakuContext)]
|
||||||
reqChannel: ChannelSPSCSingle[ptr InterThreadRequest]
|
reqChannel: ChannelSPSCSingle[ptr InterThreadRequest]
|
||||||
reqSignal: ThreadSignalPtr
|
reqSignal: ThreadSignalPtr
|
||||||
respChannel: ChannelSPSCSingle[ptr InterThreadResponse]
|
respChannel: ChannelSPSCSingle[ptr InterThreadResponse]
|
||||||
@ -26,7 +26,7 @@ const versionString = "version / git commit hash: " & waku.git_version
|
|||||||
# TODO: this should be part of the context so multiple instances can be executed
|
# TODO: this should be part of the context so multiple instances can be executed
|
||||||
var running: Atomic[bool]
|
var running: Atomic[bool]
|
||||||
|
|
||||||
proc runWaku(ctx: ptr Context) {.async.} =
|
proc runWaku(ctx: ptr WakuContext) {.async.} =
|
||||||
## This is the worker body. This runs the Waku node
|
## This is the worker body. This runs the Waku node
|
||||||
## and attends library user requests (stop, connect_to, etc.)
|
## and attends library user requests (stop, connect_to, etc.)
|
||||||
info "Starting Waku", version = versionString
|
info "Starting Waku", version = versionString
|
||||||
@ -49,14 +49,14 @@ proc runWaku(ctx: ptr Context) {.async.} =
|
|||||||
discard ctx.respChannel.trySend(threadSafeResp)
|
discard ctx.respChannel.trySend(threadSafeResp)
|
||||||
discard ctx.respSignal.fireSync()
|
discard ctx.respSignal.fireSync()
|
||||||
|
|
||||||
proc run(ctx: ptr Context) {.thread.} =
|
proc run(ctx: ptr WakuContext) {.thread.} =
|
||||||
## Launch waku worker
|
## Launch waku worker
|
||||||
waitFor runWaku(ctx)
|
waitFor runWaku(ctx)
|
||||||
|
|
||||||
proc createWakuThread*(): Result[ptr Context, string] =
|
proc createWakuThread*(): Result[ptr WakuContext, string] =
|
||||||
## This proc is called from the main thread and it creates
|
## This proc is called from the main thread and it creates
|
||||||
## the Waku working thread.
|
## the Waku working thread.
|
||||||
var ctx = createShared(Context, 1)
|
var ctx = createShared(WakuContext, 1)
|
||||||
ctx.reqSignal = ThreadSignalPtr.new().valueOr:
|
ctx.reqSignal = ThreadSignalPtr.new().valueOr:
|
||||||
return err("couldn't create reqSignal ThreadSignalPtr")
|
return err("couldn't create reqSignal ThreadSignalPtr")
|
||||||
ctx.respSignal = ThreadSignalPtr.new().valueOr:
|
ctx.respSignal = ThreadSignalPtr.new().valueOr:
|
||||||
@ -74,7 +74,7 @@ proc createWakuThread*(): Result[ptr Context, string] =
|
|||||||
|
|
||||||
return ok(ctx)
|
return ok(ctx)
|
||||||
|
|
||||||
proc stopWakuThread*(ctx: ptr Context): Result[void, string] =
|
proc stopWakuThread*(ctx: ptr WakuContext): Result[void, string] =
|
||||||
running.store(false)
|
running.store(false)
|
||||||
let fireRes = ctx.reqSignal.fireSync()
|
let fireRes = ctx.reqSignal.fireSync()
|
||||||
if fireRes.isErr():
|
if fireRes.isErr():
|
||||||
@ -86,7 +86,7 @@ proc stopWakuThread*(ctx: ptr Context): Result[void, string] =
|
|||||||
return ok()
|
return ok()
|
||||||
|
|
||||||
proc sendRequestToWakuThread*(
|
proc sendRequestToWakuThread*(
|
||||||
ctx: ptr Context, reqType: RequestType, reqContent: pointer
|
ctx: ptr WakuContext, reqType: RequestType, reqContent: pointer
|
||||||
): Result[string, string] =
|
): Result[string, string] =
|
||||||
let req = InterThreadRequest.createShared(reqType, reqContent)
|
let req = InterThreadRequest.createShared(reqType, reqContent)
|
||||||
## Sending the request
|
## Sending the request
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user