mirror of https://github.com/status-im/go-waku.git
feat: expose dns discovery thru c-bindings
This commit is contained in:
parent
7636967ccc
commit
e7ffcdbbb7
|
@ -86,6 +86,14 @@ int main(int argc, char *argv[])
|
||||||
if (isError(response))
|
if (isError(response))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// To use dns discovery, and retrieve nodes from a enrtree url
|
||||||
|
response = waku_dns_discovery("enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im", "", 0); // Discover Nodes
|
||||||
|
if (isError(response))
|
||||||
|
return 1;
|
||||||
|
printf("Discovered nodes: %s\n", response);
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// To see a store query in action:
|
// To see a store query in action:
|
||||||
|
|
|
@ -1018,6 +1018,38 @@ An `error` message otherwise.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## DNS Discovery
|
||||||
|
|
||||||
|
### `extern char* waku_dns_discovery(char* url, char* nameserver, int timeoutMs)`
|
||||||
|
Returns a list of multiaddress given a url to a DNS discoverable ENR tree
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
1. `char* url`: URL containing a discoverable ENR tree
|
||||||
|
2. `char* nameserver`: The nameserver to resolve the ENR tree url.
|
||||||
|
If `NULL` or empty, it will automatically use the default system dns.
|
||||||
|
3. `int timeoutMs`: Timeout value in milliseconds to execute the call.
|
||||||
|
If the function execution takes longer than this value,
|
||||||
|
the execution will be canceled and an error returned.
|
||||||
|
Use `0` for no timeout.
|
||||||
|
|
||||||
|
**Returns**
|
||||||
|
|
||||||
|
A [`JsonResponse`](#jsonresponse-type).
|
||||||
|
If the execution is successful, the `result` field contains an array with multiaddresses.
|
||||||
|
An `error` message otherwise.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": [
|
||||||
|
"/ip4/134.209.139.210/tcp/30303/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ",
|
||||||
|
"/ip4/104.154.239.128/tcp/30303/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS",
|
||||||
|
"/ip4/47.242.210.73/tcp/30303/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Utils
|
## Utils
|
||||||
|
|
||||||
### `extern char* waku_utils_base64_encode(char* data)`
|
### `extern char* waku_utils_base64_encode(char* data)`
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"C"
|
||||||
|
|
||||||
|
mobile "github.com/status-im/go-waku/mobile"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RetrieveNodes returns a list of multiaddress given a url to a DNS discoverable ENR tree
|
||||||
|
// The nameserver can optionally be specified to resolve the enrtree url. Otherwise NULL or
|
||||||
|
// empty to automatically use the default system dns.
|
||||||
|
// If ms is greater than 0, the subscription must happen before the timeout
|
||||||
|
// (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) *C.char {
|
||||||
|
response := mobile.DnsDiscovery(C.GoString(url), C.GoString(nameserver), int(ms))
|
||||||
|
return C.CString(response)
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package gowaku
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/status-im/go-waku/waku/v2/dnsdisc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DnsDiscovery(url string, nameserver string, ms int) string {
|
||||||
|
var ctx context.Context
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
|
||||||
|
if ms > 0 {
|
||||||
|
ctx, cancel = context.WithTimeout(context.Background(), time.Duration(int(ms))*time.Millisecond)
|
||||||
|
defer cancel()
|
||||||
|
} else {
|
||||||
|
ctx = context.Background()
|
||||||
|
}
|
||||||
|
|
||||||
|
var dnsDiscOpt []dnsdisc.DnsDiscoveryOption
|
||||||
|
if nameserver != "" {
|
||||||
|
dnsDiscOpt = append(dnsDiscOpt, dnsdisc.WithNameserver(nameserver))
|
||||||
|
}
|
||||||
|
|
||||||
|
nodes, err := dnsdisc.RetrieveNodes(ctx, url, dnsDiscOpt...)
|
||||||
|
if err != nil {
|
||||||
|
return MakeJSONResponse(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ma []string
|
||||||
|
for _, n := range nodes {
|
||||||
|
for _, addr := range n.Addresses {
|
||||||
|
ma = append(ma, addr.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return PrepareJSONResponse(ma, nil)
|
||||||
|
}
|
Loading…
Reference in New Issue