Skip to content

Commit 3f5c4c8

Browse files
feat(SwarmApi): address filters
1 parent f6281d0 commit 3f5c4c8

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

src/CoreApi/SwarmApi.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,36 @@ TimeSpan ParseLatency(string latency)
101101
public async Task DisconnectAsync(MultiAddress address, CancellationToken cancel = default(CancellationToken))
102102
{
103103
await ipfs.DoCommandAsync("swarm/disconnect", cancel, address.ToString());
104-
}
104+
}
105+
106+
public async Task<MultiAddress> AddAddressFilterAsync(MultiAddress address, bool persist = false, CancellationToken cancel = default(CancellationToken))
107+
{
108+
var json = await ipfs.DoCommandAsync("swarm/filters/add", cancel, address.ToString());
109+
var addrs = (JArray)(JObject.Parse(json)["Strings"]);
110+
var a = addrs.FirstOrDefault();
111+
if (a == null)
112+
return null;
113+
return new MultiAddress((string)a);
114+
}
115+
116+
public async Task<IEnumerable<MultiAddress>> ListAddressFiltersAsync(bool persist = false, CancellationToken cancel = default(CancellationToken))
117+
{
118+
var json = await ipfs.DoCommandAsync("swarm/filters", cancel);
119+
var addrs = (JObject.Parse(json)["Strings"]) as JArray;
120+
if (addrs == null)
121+
return new MultiAddress[0];
122+
return addrs.Select(a => new MultiAddress((string)a));
123+
}
124+
125+
public async Task<MultiAddress> RemoveAddressFilterAsync(MultiAddress address, bool persist = false, CancellationToken cancel = default(CancellationToken))
126+
{
127+
var json = await ipfs.DoCommandAsync("swarm/filters/rm", cancel, address.ToString());
128+
var addrs = (JArray)(JObject.Parse(json)["Strings"]);
129+
var a = addrs.FirstOrDefault();
130+
if (a == null)
131+
return null;
132+
return new MultiAddress((string)a);
133+
}
105134
}
106135

107136
}

src/IpfsApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
</PropertyGroup>
2828

2929
<ItemGroup>
30-
<PackageReference Include="Ipfs.Core" Version="0.18.4" />
30+
<PackageReference Include="Ipfs.Core" Version="0.18.5" />
3131
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
3232
<PackageReference Include="System.Net.Http" Version="4.3.3" Condition="'$(TargetFramework)' == 'netstandard14'" />
3333
<PackageReference Include="System.Net.Http" Version="4.3.3" Condition="'$(TargetFramework)' == 'net45'" />

test/CoreApi/SwarmApiTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,41 @@ public async Task Connection()
7979

8080
Assert.Fail("Cannot connect to any peer");
8181
}
82+
83+
[TestMethod]
84+
public async Task Filter_Add_Remove()
85+
{
86+
var ipfs = TestFixture.Ipfs;
87+
var somewhere = new MultiAddress("/ip4/192.168.0.0/ipcidr/16");
88+
var filter = await ipfs.Swarm.AddAddressFilterAsync(somewhere);
89+
Assert.IsNotNull(filter);
90+
Assert.AreEqual(somewhere, filter);
91+
var filters = await ipfs.Swarm.ListAddressFiltersAsync();
92+
Assert.IsTrue(filters.Any(a => a == somewhere));
93+
94+
filter = await ipfs.Swarm.RemoveAddressFilterAsync(somewhere);
95+
Assert.IsNotNull(filter);
96+
Assert.AreEqual(somewhere, filter);
97+
filters = await ipfs.Swarm.ListAddressFiltersAsync();
98+
Assert.IsFalse(filters.Any(a => a == somewhere));
99+
}
100+
101+
[TestMethod]
102+
public async Task Filter_List()
103+
{
104+
var ipfs = TestFixture.Ipfs;
105+
var filters = await ipfs.Swarm.ListAddressFiltersAsync(persist: false);
106+
Assert.IsNotNull(filters);
107+
}
108+
109+
[TestMethod]
110+
public async Task Filter_Remove_Unknown()
111+
{
112+
var ipfs = TestFixture.Ipfs;
113+
var somewhere = new MultiAddress("/ip4/192.168.0.3/ipcidr/2");
114+
115+
var filter = await ipfs.Swarm.RemoveAddressFilterAsync(somewhere);
116+
Assert.IsNull(filter);
117+
}
82118
}
83119
}

0 commit comments

Comments
 (0)