@@ -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