Skip to content

Commit ca26615

Browse files
feat(DhtApi): limit number of peers from FindProvidersAsync
1 parent 13b392f commit ca26615

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/CoreApi/DhtApi.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,29 @@ internal DhtApi(IpfsClient ipfs)
3131

3232
public async Task<IEnumerable<Peer>> FindProvidersAsync(Cid id, CancellationToken cancel = default(CancellationToken))
3333
{
34-
var stream = await ipfs.PostDownloadAsync("dht/findprovs", cancel, id);
35-
return ProviderFromStream(stream);
34+
int limit = 20; // TODO: should be an argument
35+
var stream = await ipfs.PostDownloadAsync("dht/findprovs", cancel, id, $"num-providers={limit}");
36+
return ProviderFromStream(stream, limit);
3637
}
3738

38-
IEnumerable<Peer> ProviderFromStream(Stream stream)
39+
IEnumerable<Peer> ProviderFromStream(Stream stream, int limit = int.MaxValue)
3940
{
4041
using (var sr = new StreamReader(stream))
4142
{
42-
while (!sr.EndOfStream)
43+
var n = 0;
44+
while (!sr.EndOfStream && n < limit)
4345
{
4446
var json = sr.ReadLine();
4547
if (log.IsDebugEnabled)
4648
log.DebugFormat("Provider {0}", json);
4749

4850
var r = JObject.Parse(json);
4951
var id = (string)r["ID"];
50-
if (id != String.Empty)
51-
yield return new Peer { Id = new MultiHash(id) };
52+
if (id != String.Empty)
53+
{
54+
++n;
55+
yield return new Peer { Id = new MultiHash(id) };
56+
}
5257
else
5358
{
5459
var responses = (JArray)r["Responses"];
@@ -57,8 +62,11 @@ IEnumerable<Peer> ProviderFromStream(Stream stream)
5762
foreach (var response in responses)
5863
{
5964
var rid = (string)response["ID"];
60-
if (rid != String.Empty)
61-
yield return new Peer { Id = new MultiHash(rid) };
65+
if (rid != String.Empty)
66+
{
67+
++n;
68+
yield return new Peer { Id = new MultiHash(rid) };
69+
}
6270
}
6371
}
6472
}

0 commit comments

Comments
 (0)