diff --git a/library/c/api.go b/library/c/api.go index 81ba8f57a..ccb025579 100644 --- a/library/c/api.go +++ b/library/c/api.go @@ -10,15 +10,15 @@ package main #define RET_ERR 1 #define RET_MISSING_CALLBACK 2 -typedef void (*WakuCallBack) (const char* msg, size_t len_0); +typedef void (*WakuCallBack) (const char* msg, void * user_data); */ import "C" import ( + "errors" "fmt" "unsafe" "github.com/waku-org/go-waku/library" - "github.com/waku-org/go-waku/waku/v2/protocol" ) const retOk = C.RET_OK @@ -92,25 +92,25 @@ func main() {} // - dns4DomainName: the domain name resolving to the node's public IPv4 address. // //export waku_new -func waku_new(configJSON *C.char, onErrCb C.WakuCallBack) C.int { +func waku_new(configJSON *C.char, onErr C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.NewNode(C.GoString(configJSON)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErr, userData) } // Starts the waku node // //export waku_start -func waku_start(onErrCb C.WakuCallBack) C.int { +func waku_start(onErr C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.Start() - return execErrCB(onErrCb, err) + return execErrCB(err, onErr, userData) } // Stops a waku node // //export waku_stop -func waku_stop(onErrCb C.WakuCallBack) C.int { +func waku_stop(onErr C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.Stop() - return execErrCB(onErrCb, err) + return execErrCB(err, onErr, userData) } // Determine is a node is started or not @@ -126,96 +126,97 @@ func waku_is_started() C.int { type fn func() (string, error) -func singleFnExec(f fn, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func singleFnExec(f fn, cb C.WakuCallBack, userData unsafe.Pointer) C.int { result, err := f() if err != nil { - return execErrCB(onErrCb, err) + return execErrCB(err, cb, userData) } - return execOkCB(onOkCb, result) + return execOkCB(result, cb, userData) } // Obtain the peer ID of the waku node // //export waku_peerid -func waku_peerid(onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_peerid(cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.PeerID() - }, onOkCb, onErrCb) + }, cb, userData) } // Obtain the multiaddresses the wakunode is listening to // //export waku_listen_addresses -func waku_listen_addresses(onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_listen_addresses(cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.ListenAddresses() - }, onOkCb, onErrCb) + }, cb, userData) } // Add node multiaddress and protocol to the wakunode peerstore // //export waku_add_peer -func waku_add_peer(address *C.char, protocolID *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_add_peer(address *C.char, protocolID *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.AddPeer(C.GoString(address), C.GoString(protocolID)) - }, onOkCb, onErrCb) + }, cb, userData) } // Connect to peer at multiaddress. if ms > 0, cancel the function execution if it takes longer than N milliseconds // //export waku_connect -func waku_connect(address *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_connect(address *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.Connect(C.GoString(address), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Connect to known peer by peerID. if ms > 0, cancel the function execution if it takes longer than N milliseconds // //export waku_connect_peerid -func waku_connect_peerid(peerID *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_connect_peerid(peerID *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.ConnectPeerID(C.GoString(peerID), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Close connection to a known peer by peerID // //export waku_disconnect -func waku_disconnect(peerID *C.char, onErrCb C.WakuCallBack) C.int { +func waku_disconnect(peerID *C.char, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.Disconnect(C.GoString(peerID)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Get number of connected peers // //export waku_peer_cnt -func waku_peer_cnt(onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_peer_cnt(cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { peerCnt, err := library.PeerCnt() return fmt.Sprintf("%d", peerCnt), err - }, onOkCb, onErrCb) + }, cb, userData) } // Create a content topic string according to RFC 23 // //export waku_content_topic -func waku_content_topic(applicationName *C.char, applicationVersion C.uint, contentTopicName *C.char, encoding *C.char, onOkCb C.WakuCallBack) C.int { - contentTopic, _ := protocol.NewContentTopic(C.GoString(applicationName), uint32(applicationVersion), C.GoString(contentTopicName), C.GoString(encoding)) - return execOkCB(onOkCb, contentTopic.String()) +func waku_content_topic(applicationName *C.char, applicationVersion C.uint, contentTopicName *C.char, encoding *C.char, onOkCb C.WakuCallBack, userData unsafe.Pointer) C.int { + //contentTopic, _ := protocol.NewContentTopic(C.GoString(applicationName), uint32(applicationVersion), C.GoString(contentTopicName), C.GoString(encoding)) + return execErrCB(errors.New("OOPS"), onOkCb, userData) + // return execOkCB(contentTopic.String(), onOkCb, userData) } // Create a pubsub topic string according to RFC 23 // //export waku_pubsub_topic -func waku_pubsub_topic(name *C.char, encoding *C.char, onOkCb C.WakuCallBack) C.int { +func waku_pubsub_topic(name *C.char, encoding *C.char, onOkCb C.WakuCallBack, userData unsafe.Pointer) C.int { topic := library.PubsubTopic(C.GoString(name), C.GoString(encoding)) - return execOkCB(onOkCb, topic) + return execOkCB(topic, onOkCb, userData) } // Get the default pubsub topic used in waku2: /waku/2/default-waku/proto // //export waku_default_pubsub_topic -func waku_default_pubsub_topic(onOkCb C.WakuCallBack) C.int { - return execOkCB(onOkCb, library.DefaultPubsubTopic()) +func waku_default_pubsub_topic(onOkCb C.WakuCallBack, userData unsafe.Pointer) C.int { + return execOkCB(library.DefaultPubsubTopic(), onOkCb, userData) } // Register callback to act as signal handler and receive application signals @@ -230,8 +231,8 @@ func waku_set_event_callback(cb C.WakuCallBack) { // Retrieve the list of peers known by the waku node // //export waku_peers -func waku_peers(onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_peers(cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.Peers() - }, onOkCb, onErrCb) + }, cb, userData) } diff --git a/library/c/api_discovery.go b/library/c/api_discovery.go index 31171e980..53031c257 100644 --- a/library/c/api_discovery.go +++ b/library/c/api_discovery.go @@ -5,7 +5,11 @@ package main */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Returns a list of objects containing the peerID, enr and multiaddresses for each node found // @@ -17,17 +21,17 @@ import "github.com/waku-org/go-waku/library" // (in milliseconds) is reached, or an error will be returned // //export waku_dns_discovery -func waku_dns_discovery(url *C.char, nameserver *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_dns_discovery(url *C.char, nameserver *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.DNSDiscovery(C.GoString(url), C.GoString(nameserver), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } // Update the bootnode list used for discovering new peers via DiscoveryV5 // The bootnodes param should contain a JSON array containing the bootnode ENRs i.e. `["enr:...", "enr:..."]` // //export waku_discv5_update_bootnodes -func waku_discv5_update_bootnodes(bootnodes *C.char, onErrCb C.WakuCallBack) C.int { +func waku_discv5_update_bootnodes(bootnodes *C.char, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.SetBootnodes(C.GoString(bootnodes)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } diff --git a/library/c/api_encoding.go b/library/c/api_encoding.go index 6a9d03d29..a9c38ae96 100644 --- a/library/c/api_encoding.go +++ b/library/c/api_encoding.go @@ -4,24 +4,28 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Decode a waku message using a 32 bytes symmetric key. The key must be a hex encoded string with "0x" prefix // //export waku_decode_symmetric -func waku_decode_symmetric(messageJSON *C.char, symmetricKey *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_decode_symmetric(messageJSON *C.char, symmetricKey *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.DecodeSymmetric(C.GoString(messageJSON), C.GoString(symmetricKey)) - }, onOkCb, onErrCb) + }, cb, userData) } // Decode a waku message using a secp256k1 private key. The key must be a hex encoded string with "0x" prefix // //export waku_decode_asymmetric -func waku_decode_asymmetric(messageJSON *C.char, privateKey *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_decode_asymmetric(messageJSON *C.char, privateKey *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.DecodeAsymmetric(C.GoString(messageJSON), C.GoString(privateKey)) - }, onOkCb, onErrCb) + }, cb, userData) } // Encrypt a message with a secp256k1 public key. @@ -30,10 +34,10 @@ func waku_decode_asymmetric(messageJSON *C.char, privateKey *C.char, onOkCb C.Wa // The message version will be set to 1 // //export waku_encode_asymmetric -func waku_encode_asymmetric(messageJSON *C.char, publicKey *C.char, optionalSigningKey *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_encode_asymmetric(messageJSON *C.char, publicKey *C.char, optionalSigningKey *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.EncodeAsymmetric(C.GoString(messageJSON), C.GoString(publicKey), C.GoString(optionalSigningKey)) - }, onOkCb, onErrCb) + }, cb, userData) } // Encrypt a message with a 32 bytes symmetric key @@ -42,8 +46,8 @@ func waku_encode_asymmetric(messageJSON *C.char, publicKey *C.char, optionalSign // The message version will be set to 1 // //export waku_encode_symmetric -func waku_encode_symmetric(messageJSON *C.char, symmetricKey *C.char, optionalSigningKey *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_encode_symmetric(messageJSON *C.char, symmetricKey *C.char, optionalSigningKey *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.EncodeSymmetric(C.GoString(messageJSON), C.GoString(symmetricKey), C.GoString(optionalSigningKey)) - }, onOkCb, onErrCb) + }, cb, userData) } diff --git a/library/c/api_filter.go b/library/c/api_filter.go index 4a7496990..2658ef4e0 100644 --- a/library/c/api_filter.go +++ b/library/c/api_filter.go @@ -4,7 +4,11 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Creates a subscription to a filter full node matching a content filter. // filterJSON must contain a JSON with this format: @@ -20,10 +24,10 @@ import "github.com/waku-org/go-waku/library" // It returns a json object containing the details of the subscriptions along with any errors in case of partial failures // //export waku_filter_subscribe -func waku_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.FilterSubscribe(C.GoString(filterJSON), C.GoString(peerID), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } // Used to know if a service node has an active subscription for this client @@ -32,9 +36,9 @@ func waku_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, onOkCb // (in milliseconds) is reached, or an error will be returned // //export waku_filter_ping -func waku_filter_ping(peerID *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_filter_ping(peerID *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.FilterPing(C.GoString(peerID), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Sends a requests to a service node to stop pushing messages matching this filter to this client. @@ -51,9 +55,9 @@ func waku_filter_ping(peerID *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { // (in milliseconds) is reached, or an error will be returned // //export waku_filter_unsubscribe -func waku_filter_unsubscribe(filterJSON *C.char, peerID *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_filter_unsubscribe(filterJSON *C.char, peerID *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.FilterUnsubscribe(C.GoString(filterJSON), C.GoString(peerID), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Sends a requests to a service node (or all service nodes) to stop pushing messages @@ -63,8 +67,8 @@ func waku_filter_unsubscribe(filterJSON *C.char, peerID *C.char, ms C.int, onErr // (in milliseconds) is reached, or an error will be returned // //export waku_filter_unsubscribe_all -func waku_filter_unsubscribe_all(peerID *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_filter_unsubscribe_all(peerID *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.FilterUnsubscribeAll(C.GoString(peerID), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } diff --git a/library/c/api_legacy_filter.go b/library/c/api_legacy_filter.go index 4c0893f3d..0bdcc396d 100644 --- a/library/c/api_legacy_filter.go +++ b/library/c/api_legacy_filter.go @@ -4,7 +4,11 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Creates a subscription to a light node matching a content filter and, optionally, a pubSub topic. // filterJSON must contain a JSON with this format: @@ -23,9 +27,9 @@ import "github.com/waku-org/go-waku/library" // (in milliseconds) is reached, or an error will be returned // //export waku_legacy_filter_subscribe -func waku_legacy_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_legacy_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.LegacyFilterSubscribe(C.GoString(filterJSON), C.GoString(peerID), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Removes subscriptions in a light node matching a content filter and, optionally, a pubSub topic. @@ -44,7 +48,7 @@ func waku_legacy_filter_subscribe(filterJSON *C.char, peerID *C.char, ms C.int, // (in milliseconds) is reached, or an error will be returned // //export waku_legacy_filter_unsubscribe -func waku_legacy_filter_unsubscribe(filterJSON *C.char, ms C.int, onErrCb C.WakuCallBack) C.int { +func waku_legacy_filter_unsubscribe(filterJSON *C.char, ms C.int, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.LegacyFilterUnsubscribe(C.GoString(filterJSON), int(ms)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } diff --git a/library/c/api_lightpush.go b/library/c/api_lightpush.go index 2243f4f1e..fd726dd02 100644 --- a/library/c/api_lightpush.go +++ b/library/c/api_lightpush.go @@ -4,7 +4,11 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Publish a message using waku lightpush. Use NULL for topic to use the default pubsub topic.. // peerID should contain the ID of a peer supporting the lightpush protocol. Use NULL to automatically select a node @@ -12,8 +16,8 @@ import "github.com/waku-org/go-waku/library" // (in milliseconds) is reached, or an error will be returned // //export waku_lightpush_publish -func waku_lightpush_publish(messageJSON *C.char, topic *C.char, peerID *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_lightpush_publish(messageJSON *C.char, topic *C.char, peerID *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.LightpushPublish(C.GoString(messageJSON), C.GoString(topic), C.GoString(peerID), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } diff --git a/library/c/api_relay.go b/library/c/api_relay.go index 0f84c3ce6..dc680b423 100644 --- a/library/c/api_relay.go +++ b/library/c/api_relay.go @@ -4,20 +4,24 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Determine if there are enough peers to publish a message on a topic. Use NULL // to verify the number of peers in the default pubsub topic // //export waku_relay_enough_peers -func waku_relay_enough_peers(topic *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_relay_enough_peers(topic *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { result, err := library.RelayEnoughPeers(C.GoString(topic)) if result { return "true", err } return "false", err - }, onOkCb, onErrCb) + }, cb, userData) } // Publish a message using waku relay and returns the message ID. Use NULL for topic to use the default pubsub topic @@ -25,10 +29,10 @@ func waku_relay_enough_peers(topic *C.char, onOkCb C.WakuCallBack, onErrCb C.Wak // (in milliseconds) is reached, or an error will be returned. // //export waku_relay_publish -func waku_relay_publish(messageJSON *C.char, topic *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_relay_publish(messageJSON *C.char, topic *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.RelayPublish(C.GoString(messageJSON), C.GoString(topic), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } // Subscribe to a WakuRelay topic. Set the topic to NULL to subscribe @@ -37,25 +41,25 @@ func waku_relay_publish(messageJSON *C.char, topic *C.char, ms C.int, onOkCb C.W // the message was received // //export waku_relay_subscribe -func waku_relay_subscribe(topic *C.char, onErrCb C.WakuCallBack) C.int { +func waku_relay_subscribe(topic *C.char, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.RelaySubscribe(C.GoString(topic)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } // Returns a json response with the list of pubsub topics the node // is subscribed to in WakuRelay // //export waku_relay_topics -func waku_relay_topics(onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_relay_topics(cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.RelayTopics() - }, onOkCb, onErrCb) + }, cb, userData) } // Closes the pubsub subscription to a pubsub topic // //export waku_relay_unsubscribe -func waku_relay_unsubscribe(topic *C.char, onErrCb C.WakuCallBack) C.int { +func waku_relay_unsubscribe(topic *C.char, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { err := library.RelayUnsubscribe(C.GoString(topic)) - return execErrCB(onErrCb, err) + return execErrCB(err, onErrCb, userData) } diff --git a/library/c/api_store.go b/library/c/api_store.go index 7cf83cc4d..9a292bfd1 100644 --- a/library/c/api_store.go +++ b/library/c/api_store.go @@ -4,7 +4,11 @@ package main #include */ import "C" -import "github.com/waku-org/go-waku/library" +import ( + "unsafe" + + "github.com/waku-org/go-waku/library" +) // Query historic messages using waku store protocol. // queryJSON must contain a valid json string with the following format: @@ -36,10 +40,10 @@ import "github.com/waku-org/go-waku/library" // (in milliseconds) is reached, or an error will be returned // //export waku_store_query -func waku_store_query(queryJSON *C.char, peerID *C.char, ms C.int, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_store_query(queryJSON *C.char, peerID *C.char, ms C.int, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.StoreQuery(C.GoString(queryJSON), C.GoString(peerID), int(ms)) - }, onOkCb, onErrCb) + }, cb, userData) } // Query historic messages stored in the localDB using waku store protocol. @@ -70,8 +74,8 @@ func waku_store_query(queryJSON *C.char, peerID *C.char, ms C.int, onOkCb C.Waku // Requires the `store` option to be passed when setting up the initial configuration // //export waku_store_local_query -func waku_store_local_query(queryJSON *C.char, onOkCb C.WakuCallBack, onErrCb C.WakuCallBack) C.int { +func waku_store_local_query(queryJSON *C.char, cb C.WakuCallBack, userData unsafe.Pointer) C.int { return singleFnExec(func() (string, error) { return library.StoreLocalQuery(C.GoString(queryJSON)) - }, onOkCb, onErrCb) + }, cb, userData) } diff --git a/library/c/cgo_utils.c b/library/c/cgo_utils.c index defe95f17..c31bd804d 100644 --- a/library/c/cgo_utils.c +++ b/library/c/cgo_utils.c @@ -4,6 +4,6 @@ // This is a bridge function to execute C callbacks. // It's used internally in go-waku. Do not call directly -void _waku_execCB(WakuCallBack op, char* a, size_t b) { - op(a, b); +void _waku_execCB(WakuCallBack op, char* a, void * user_data) { + op(a, user_data); } diff --git a/library/c/cgo_utils.go b/library/c/cgo_utils.go index 417e830f4..a1b401c46 100644 --- a/library/c/cgo_utils.go +++ b/library/c/cgo_utils.go @@ -3,33 +3,32 @@ package main /* #include #include -extern void _waku_execCB(WakuCallBack op, char* a, size_t b); +extern void _waku_execCB(WakuCallBack op, char* a, void * b); */ import "C" import "unsafe" -func execOkCB(onOkCb C.WakuCallBack, value string) C.int { +func execOkCB(value string, onOkCb C.WakuCallBack, userData unsafe.Pointer) C.int { if onOkCb == nil { return retMissingCallback } val := C.CString(value) - valLen := C.size_t(len(value)) - C._waku_execCB(onOkCb, val, valLen) + C._waku_execCB(onOkCb, val, userData) C.free(unsafe.Pointer(val)) return retOk } -func execErrCB(onErrCb C.WakuCallBack, err error) C.int { +func execErrCB(err error, onErrCb C.WakuCallBack, userData unsafe.Pointer) C.int { if onErrCb == nil { return retMissingCallback } if err != nil { errMsg := err.Error() - execOkCB(onErrCb, errMsg) // reusing ok cb + execOkCB(errMsg, onErrCb, userData) // reusing ok cb return retErr } diff --git a/library/c/cgo_utils.h b/library/c/cgo_utils.h index 47582ed29..2e6853be5 100644 --- a/library/c/cgo_utils.h +++ b/library/c/cgo_utils.h @@ -1,6 +1,4 @@ #include #include -typedef void (*WakuCallBack) (const char* msg, size_t len_0); - -typedef void (*BytesCallBack) (uint8_t* data, size_t len_0); \ No newline at end of file +typedef void (*WakuCallBack) (const char* msg, void * user_data); diff --git a/library/encoding.go b/library/encoding.go index eefa54b4b..6b6e83dc0 100644 --- a/library/encoding.go +++ b/library/encoding.go @@ -137,7 +137,12 @@ func DecodeSymmetric(messageJSON string, symmetricKey string) (string, error) { } if msg.Version == 0 { - return marshalJSON(msg.Payload) + return marshalJSON(struct { + Data []byte `json:"data"` + Padding []byte `json:"padding"` + }{ + Data: msg.Payload, + }) } else if msg.Version > 1 { return "", errors.New("unsupported wakumessage version") } @@ -182,7 +187,12 @@ func DecodeAsymmetric(messageJSON string, privateKey string) (string, error) { } if msg.Version == 0 { - return marshalJSON(msg.Payload) + return marshalJSON(struct { + Data []byte `json:"data"` + Padding []byte `json:"padding"` + }{ + Data: msg.Payload, + }) } else if msg.Version > 1 { return "", errors.New("unsupported wakumessage version") } diff --git a/library/node.go b/library/node.go index a3da4f03d..e2644ef5b 100644 --- a/library/node.go +++ b/library/node.go @@ -382,5 +382,16 @@ func Peers() (string, error) { return "", err } + for _, p := range peers { + addrs := []multiaddr.Multiaddr{} + for i := range p.Addrs { + _, err := p.Addrs[i].ValueForProtocol(multiaddr.P_SNI) + if err != nil { + addrs = append(addrs, p.Addrs[i]) + } + } + p.Addrs = addrs + } + return marshalJSON(peers) } diff --git a/library/signals.c b/library/signals.c index 8733fbc5b..297ef1905 100644 --- a/library/signals.c +++ b/library/signals.c @@ -7,12 +7,12 @@ #include #include "_cgo_export.h" -typedef void (*callback)(const char *jsonEvent, size_t len_0); +typedef void (*callback)(const char *jsonEvent); callback gCallback = 0; -bool ServiceSignalEvent(const char *jsonEvent, size_t len_0) { +bool ServiceSignalEvent(const char *jsonEvent) { if (gCallback) { - gCallback(jsonEvent, len_0); + gCallback(jsonEvent); } return true;