From 34a167753b6c27632796f7cde75a11f8aa46940a Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Tue, 8 Apr 2014 09:11:10 +0000 Subject: fixes --- build.gradle | 26 +------------ doc/gnunet-java-tutorial.tex | 2 +- .../java/org/gnunet/dht/DistributedHashTable.java | 12 ++++++ src/main/java/org/gnunet/dht/RouteOption.java | 2 +- src/main/java/org/gnunet/gns/Gns.java | 24 ++++++++++-- src/main/java/org/gnunet/gns/GnsTool.java | 2 +- src/main/java/org/gnunet/identity/Identity.java | 15 +++++--- .../org/gnunet/mesh/InboundChannelHandler.java | 2 +- src/main/java/org/gnunet/mesh/Mesh.java | 2 +- .../java/org/gnunet/statistics/StatisticsTool.java | 4 +- src/main/java/org/gnunet/util/Service.java | 9 ++--- src/main/resources/org/gnunet/construct/MsgMap.txt | 44 +++++++++++----------- src/test/java/org/gnunet/dht/DHTTest.java | 8 ++-- src/test/java/org/gnunet/mesh/MeshTest.java | 6 +-- 14 files changed, 84 insertions(+), 74 deletions(-) diff --git a/build.gradle b/build.gradle index 2523bbf..3dae654 100644 --- a/build.gradle +++ b/build.gradle @@ -87,33 +87,8 @@ test { beforeTest{ descr -> logger.warn("Starting test ${descr.className} : ${descr.name}") } - useJUnit { - excludeCategories 'org.gnunet.testcat.ExpensiveTests' - excludeCategories 'org.gnunet.testcat.ExperimentalTests' - } } -task testExpensive(type: Test) { - // Print test name, so that we can easily find out - // which test does not terminate. - beforeTest{ descr -> - logger.warn("Starting expensive test ${descr.className} : ${descr.name}") - } - useJUnit { - excludeCategories 'org.gnunet.testcat.ExperimentalTests' - } -} - -task testExperimental(type: Test) { - // Print test name, so that we can easily find out - // which test does not terminate. - beforeTest{ descr -> - logger.warn("Starting experimental test ${descr.className} : ${descr.name}") - } - useJUnit { - includeCategories 'org.gnunet.testcat.ExperimentalTes' - } -} task copyDeps(type: Copy) { into "$projectDir/lib" @@ -157,3 +132,4 @@ publishing { javadoc.exclude '**/messages/**' + diff --git a/doc/gnunet-java-tutorial.tex b/doc/gnunet-java-tutorial.tex index 515b745..225a02a 100644 --- a/doc/gnunet-java-tutorial.tex +++ b/doc/gnunet-java-tutorial.tex @@ -85,7 +85,7 @@ in order to copy all dependencies into the \texttt{lib/} folder\footnote{This is ask Gradle for the classpath pointing to the internal cache. However, having all dependencies in one folder is more convenient, especially when using shell wrappers for Java entry points later on.}. -Check if if you're on the right track by running the Java client for GNUnet's network size estimation service: +Check if you're on the right track by running the Java client for GNUnet's network size estimation service: \begin{lstlisting}[language=bash] \$ java -cp 'lib/*' org.gnunet.nse.NetworkSizeEstimation \end{lstlisting} diff --git a/src/main/java/org/gnunet/dht/DistributedHashTable.java b/src/main/java/org/gnunet/dht/DistributedHashTable.java index 27bac92..1ff0912 100644 --- a/src/main/java/org/gnunet/dht/DistributedHashTable.java +++ b/src/main/java/org/gnunet/dht/DistributedHashTable.java @@ -66,6 +66,7 @@ public class DistributedHashTable { public int type; public Continuation cont; public long uid; + private int options; public PutRequest() { this.uid = nextUID++; @@ -80,6 +81,7 @@ public class DistributedHashTable { cpm.expiration = expiration.asMessage(); cpm.type = type; cpm.uid = uid; + cpm.options = options; return new Envelope(cpm); } @@ -95,6 +97,7 @@ public class DistributedHashTable { public int type; public int replication; public byte[] xquery; + public int options; public GetRequest() { uid = DistributedHashTable.this.nextUID++; @@ -108,6 +111,7 @@ public class DistributedHashTable { gm.xquery = xquery == null ? new byte[0] : xquery; gm.key = key; gm.uniqueId = uid; + gm.options = options; return new Envelope(gm); } public void onCancel() { @@ -269,6 +273,10 @@ public class DistributedHashTable { pr.expiration = expiration; pr.type = type; pr.cont = cont; + pr.options = 0; + for (RouteOption routeOption : routeOptions) { + pr.options |= routeOption.val; + } putRequests.addRequest(pr.uid, pr); } @@ -297,6 +305,10 @@ public class DistributedHashTable { getRequest.replication = type; getRequest.xquery = xquery; getRequest.replication = replication; + getRequest.options = 0; + for (RouteOption routeOption : routeOptions) { + getRequest.options |= routeOption.val; + } return getRequests.addRequest(getRequest.uid, getRequest); } diff --git a/src/main/java/org/gnunet/dht/RouteOption.java b/src/main/java/org/gnunet/dht/RouteOption.java index e6593b4..fc86321 100644 --- a/src/main/java/org/gnunet/dht/RouteOption.java +++ b/src/main/java/org/gnunet/dht/RouteOption.java @@ -47,7 +47,7 @@ enum RouteOption { */ BART(8); - private int val; + int val; RouteOption(int val) { this.val = val; diff --git a/src/main/java/org/gnunet/gns/Gns.java b/src/main/java/org/gnunet/gns/Gns.java index 0e64ae0..cd9d02b 100644 --- a/src/main/java/org/gnunet/gns/Gns.java +++ b/src/main/java/org/gnunet/gns/Gns.java @@ -37,6 +37,23 @@ import org.slf4j.LoggerFactory; public class Gns { private static final Logger logger = LoggerFactory .getLogger(Gns.class); + + /** + * Defaults, look in cache, then in DHT. + */ + public static final int LOOKUP_OPTION_DEFAULT = 0; + + /** + * Never look in the DHT, keep request to local cache. + */ + public static final int LOOKUP_OPTION_NO_DHT = 1; + + /** + * For the rightmost label, only look in the cache (it + * is our master zone), for the others, the DHT is OK. + */ + public static final int LOOKUP_OPTION_LOCAL_MASTER = 2; + /** * All pending and active lookup requests. */ @@ -97,7 +114,7 @@ public class Gns { * @param name the name to look up * @param zone zone to look in * @param type the GNS record type to look for - * @param onlyCached true to only check locally (not in the DHT) + * @param lookupOption a Gns.LOOKUP_OPTION_* value * @param shortenZoneKey the private key of the shorten zone (can be NULL); * specify to enable automatic shortening (given a PSEU * record, if a given pseudonym is not yet used in the @@ -108,7 +125,7 @@ public class Gns { */ public Cancelable lookup(String name, EcdsaPublicKey zone, - long type, boolean onlyCached, + long type, int lookupOption, EcdsaPrivateKey shortenZoneKey, LookupResultProcessor proc) { ClientLookupMessage m = new ClientLookupMessage(); @@ -122,10 +139,11 @@ public class Gns { } m.id = nextUID++; m.name = name; - m.onlyCached = onlyCached ? 1 : 0; + m.onlyCached = lookupOption; m.type = type; m.zone = zone; + return lookupRequests.addRequest(m.id, new FixedMessageRequest(m, proc)); } diff --git a/src/main/java/org/gnunet/gns/GnsTool.java b/src/main/java/org/gnunet/gns/GnsTool.java index 0d33dc1..932eed7 100644 --- a/src/main/java/org/gnunet/gns/GnsTool.java +++ b/src/main/java/org/gnunet/gns/GnsTool.java @@ -56,7 +56,7 @@ public class GnsTool { public void onEgo(Identity.Ego ego) { System.out.println("looking in zone " + ego.getPublicKey()); final Gns gns = new Gns(getConfiguration()); - gns.lookup(name, ego.getPublicKey(), typeId, false, null, new LookupResultProcessor() { + gns.lookup(name, ego.getPublicKey(), typeId, 0, null, new LookupResultProcessor() { @Override public void process(GnsRecord[] records) { System.out.println("got " + records.length + " records"); diff --git a/src/main/java/org/gnunet/identity/Identity.java b/src/main/java/org/gnunet/identity/Identity.java index 7273ef6..9f03234 100644 --- a/src/main/java/org/gnunet/identity/Identity.java +++ b/src/main/java/org/gnunet/identity/Identity.java @@ -326,7 +326,8 @@ public class Identity { * Connect to the identity service. * * @param configuration configuration to use - * @param identityListCallback + * @param identityListCallback callback that receives initially the list of all egos, + * and subsequently changes to egos */ public void connect(Configuration configuration, IdentityListCallback identityListCallback) { this.configuration = configuration; @@ -449,7 +450,8 @@ public class Identity { public void visit(final UpdateListMessage m) { if (m.endOfList != 0) { - identityListCallback.onListEnd(); + if (null != identityListCallback) + identityListCallback.onListEnd(); return; } if (m.nameLength == 0) { @@ -457,18 +459,21 @@ public class Identity { if (null != e) { knownEgos.remove(e); } - identityListCallback.onEgoDelete(e); + if (null != identityListCallback) + identityListCallback.onEgoDelete(e); } else { Ego existingEgo = getEgoForKey(m.privateKey); if (existingEgo == null) { Ego ego = new Ego(m.egoName, m.privateKey); knownEgos.add(ego); - identityListCallback.onEgoAdd(ego); + if (null != identityListCallback) + identityListCallback.onEgoAdd(ego); } else { // rename String oldName = existingEgo.name; existingEgo.name = m.egoName; - identityListCallback.onEgoRename(oldName, existingEgo); + if (null != identityListCallback) + identityListCallback.onEgoRename(oldName, existingEgo); } } } diff --git a/src/main/java/org/gnunet/mesh/InboundChannelHandler.java b/src/main/java/org/gnunet/mesh/InboundChannelHandler.java index a8cb6b7..666f4ae 100644 --- a/src/main/java/org/gnunet/mesh/InboundChannelHandler.java +++ b/src/main/java/org/gnunet/mesh/InboundChannelHandler.java @@ -8,5 +8,5 @@ import org.gnunet.util.PeerIdentity; * @author Florian Dold */ public interface InboundChannelHandler { - void onInboundTunnel(Mesh.Channel channel, PeerIdentity initiator); + void onInboundChannel(Mesh.Channel channel, PeerIdentity initiator); } diff --git a/src/main/java/org/gnunet/mesh/Mesh.java b/src/main/java/org/gnunet/mesh/Mesh.java index ede7761..4d12a19 100644 --- a/src/main/java/org/gnunet/mesh/Mesh.java +++ b/src/main/java/org/gnunet/mesh/Mesh.java @@ -237,7 +237,7 @@ public class Mesh { (m.opt & OPTION_NOBUFFER) != 0, (m.opt & OPTION_NOBUFFER) != 0); logger.debug("inbound tunnel {}", m.tunnelId); if (inboundChannelHandler != null) { - inboundChannelHandler.onInboundTunnel(t, m.otherEnd); + inboundChannelHandler.onInboundChannel(t, m.otherEnd); } } diff --git a/src/main/java/org/gnunet/statistics/StatisticsTool.java b/src/main/java/org/gnunet/statistics/StatisticsTool.java index 0505588..a9f1f2c 100644 --- a/src/main/java/org/gnunet/statistics/StatisticsTool.java +++ b/src/main/java/org/gnunet/statistics/StatisticsTool.java @@ -14,13 +14,13 @@ public class StatisticsTool extends Program { shortname = "x", longname = "set", action = ArgumentAction.SET, - description = "watch a value") + description = "set a value") boolean set; @Argument( shortname = "w", longname = "watch", action = ArgumentAction.SET, - description = "set a value") + description = "watch a value") boolean watch; @Argument( shortname = "n", diff --git a/src/main/java/org/gnunet/util/Service.java b/src/main/java/org/gnunet/util/Service.java index af7529e..d815818 100644 --- a/src/main/java/org/gnunet/util/Service.java +++ b/src/main/java/org/gnunet/util/Service.java @@ -52,11 +52,9 @@ public abstract class Service extends Program { private RelativeTime idleTimeout; private boolean requireFound; - - private Cancelable sigpipeTask; private Pipe.SourceChannel sigpipeChannel; - public Service(String serviceName, RelativeTime idleTimeout, boolean requireFound, String[] args) { + public Service(String serviceName, RelativeTime idleTimeout, boolean requireFound) { this.serviceName = serviceName; this.idleTimeout = idleTimeout; this.requireFound = requireFound; @@ -109,7 +107,8 @@ public abstract class Service extends Program { Scheduler.TaskConfiguration t = new Scheduler.TaskConfiguration(RelativeTime.FOREVER, new SigpipeTask()); t.addSelectEvent(p.getSource(), SelectionKey.OP_READ); - sigpipeTask = t.schedule(); + t.setLifeness(false); + t.schedule(); sigpipeChannel = p.getSource(); } @@ -141,7 +140,7 @@ public abstract class Service extends Program { } if (!stopped) { Scheduler.TaskConfiguration t = new Scheduler.TaskConfiguration(RelativeTime.FOREVER, this); - sigpipeTask = t.schedule(); + t.schedule(); } else { try { sigpipeChannel.close(); diff --git a/src/main/resources/org/gnunet/construct/MsgMap.txt b/src/main/resources/org/gnunet/construct/MsgMap.txt index c4a0584..9273b14 100644 --- a/src/main/resources/org/gnunet/construct/MsgMap.txt +++ b/src/main/resources/org/gnunet/construct/MsgMap.txt @@ -34,15 +34,15 @@ org.gnunet.util.GnunetMessage$Body|782=org.gnunet.secretsharing.messages.Decrypt org.gnunet.util.GnunetMessage$Body|783=org.gnunet.secretsharing.messages.SecretReadyMessage org.gnunet.util.GnunetMessage$Body|780=org.gnunet.secretsharing.messages.GenerateMessage org.gnunet.util.GnunetMessage$Body|781=org.gnunet.secretsharing.messages.ClientDecryptMessage -org.gnunet.util.GnunetMessage$Body|68=org.gnunet.core.DisconnectNotifyMessage -org.gnunet.util.GnunetMessage$Body|70=org.gnunet.core.NotifyInboundTrafficMessage -org.gnunet.util.GnunetMessage$Body|71=org.gnunet.core.NotifyOutboundTrafficMessage -org.gnunet.util.GnunetMessage$Body|64=org.gnunet.core.InitMessage -org.gnunet.util.GnunetMessage$Body|65=org.gnunet.core.InitReplyMessage -org.gnunet.util.GnunetMessage$Body|67=org.gnunet.core.ConnectNotifyMessage -org.gnunet.util.GnunetMessage$Body|76=org.gnunet.core.SendMessage -org.gnunet.util.GnunetMessage$Body|74=org.gnunet.core.SendMessageRequest -org.gnunet.util.GnunetMessage$Body|75=org.gnunet.core.SendMessageReady +org.gnunet.util.GnunetMessage$Body|68=org.gnunet.core.messages.DisconnectNotifyMessage +org.gnunet.util.GnunetMessage$Body|70=org.gnunet.core.messages.NotifyInboundTrafficMessage +org.gnunet.util.GnunetMessage$Body|71=org.gnunet.core.messages.NotifyOutboundTrafficMessage +org.gnunet.util.GnunetMessage$Body|64=org.gnunet.core.messages.InitMessage +org.gnunet.util.GnunetMessage$Body|65=org.gnunet.core.messages.InitReplyMessage +org.gnunet.util.GnunetMessage$Body|67=org.gnunet.core.messages.ConnectNotifyMessage +org.gnunet.util.GnunetMessage$Body|76=org.gnunet.core.messages.SendMessage +org.gnunet.util.GnunetMessage$Body|74=org.gnunet.core.messages.SendMessageRequest +org.gnunet.util.GnunetMessage$Body|75=org.gnunet.core.messages.SendMessageReady org.gnunet.util.GnunetMessage$Body|627=org.gnunet.identity.messages.GetDefaultMessage org.gnunet.util.GnunetMessage$Body|626=org.gnunet.identity.messages.UpdateListMessage org.gnunet.util.GnunetMessage$Body|625=org.gnunet.identity.messages.ResultCodeMessage @@ -53,9 +53,9 @@ org.gnunet.util.GnunetMessage$Body|630=org.gnunet.identity.messages.RenameMessag org.gnunet.util.GnunetMessage$Body|629=org.gnunet.identity.messages.CreateRequestMessage org.gnunet.util.GnunetMessage$Body|321=org.gnunet.nse.StartMessage org.gnunet.util.GnunetMessage$Body|628=org.gnunet.identity.messages.SetDefaultMessage -org.gnunet.util.GnunetMessage$Body|332=org.gnunet.peerinfo.InfoMessage -org.gnunet.util.GnunetMessage$Body|333=org.gnunet.peerinfo.InfoEnd -org.gnunet.util.GnunetMessage$Body|331=org.gnunet.peerinfo.ListAllPeersMessage +org.gnunet.util.GnunetMessage$Body|332=org.gnunet.peerinfo.messages.InfoMessage +org.gnunet.util.GnunetMessage$Body|333=org.gnunet.peerinfo.messages.InfoEnd +org.gnunet.util.GnunetMessage$Body|331=org.gnunet.peerinfo.messages.ListAllPeersMessage org.gnunet.util.GnunetMessage$Body|374=org.gnunet.transport.messages.RequestConnectMessage org.gnunet.util.GnunetMessage$Body|369=org.gnunet.transport.messages.BlacklistInitMessage org.gnunet.util.GnunetMessage$Body|371=org.gnunet.transport.messages.BlacklistReplyMessage @@ -64,15 +64,15 @@ org.gnunet.util.GnunetMessage$Body|380=org.gnunet.transport.messages.AddressIter org.gnunet.util.GnunetMessage$Body|383=org.gnunet.transport.messages.AddressIterateResponseMessage org.gnunet.util.GnunetMessage$Body|366=org.gnunet.transport.messages.SetQuotaMessage org.gnunet.util.GnunetMessage$Body|360=org.gnunet.transport.messages.StartMessage -org.gnunet.util.GnunetMessage$Body|143=org.gnunet.dht.ClientGetMessage -org.gnunet.util.GnunetMessage$Body|142=org.gnunet.dht.ClientPutMessage -org.gnunet.util.GnunetMessage$Body|153=org.gnunet.dht.MonitorStartStop -org.gnunet.util.GnunetMessage$Body|155=org.gnunet.dht.ClientPutConfirmationMessage -org.gnunet.util.GnunetMessage$Body|144=org.gnunet.dht.ClientGetStopMessage -org.gnunet.util.GnunetMessage$Body|145=org.gnunet.dht.ClientResultMessage -org.gnunet.util.GnunetMessage$Body|149=org.gnunet.dht.MonitorGetMessage -org.gnunet.util.GnunetMessage$Body|150=org.gnunet.dht.MonitorGetRespMessage -org.gnunet.util.GnunetMessage$Body|151=org.gnunet.dht.MonitorPutMessage +org.gnunet.util.GnunetMessage$Body|143=org.gnunet.dht.messages.ClientGetMessage +org.gnunet.util.GnunetMessage$Body|142=org.gnunet.dht.messages.ClientPutMessage +org.gnunet.util.GnunetMessage$Body|153=org.gnunet.dht.messages.MonitorStartStop +org.gnunet.util.GnunetMessage$Body|155=org.gnunet.dht.messages.ClientPutConfirmationMessage +org.gnunet.util.GnunetMessage$Body|144=org.gnunet.dht.messages.ClientGetStopMessage +org.gnunet.util.GnunetMessage$Body|145=org.gnunet.dht.messages.ClientResultMessage +org.gnunet.util.GnunetMessage$Body|149=org.gnunet.dht.messages.MonitorGetMessage +org.gnunet.util.GnunetMessage$Body|150=org.gnunet.dht.messages.MonitorGetRespMessage +org.gnunet.util.GnunetMessage$Body|151=org.gnunet.dht.messages.MonitorPutMessage org.gnunet.util.GnunetMessage$Body|171=org.gnunet.statistics.messages.GetResponseEndMessage org.gnunet.util.GnunetMessage$Body|170=org.gnunet.statistics.messages.GetResponseMessage org.gnunet.util.GnunetMessage$Body|169=org.gnunet.statistics.messages.GetMessage @@ -100,4 +100,4 @@ org.gnunet.util.GnunetMessage$Body|495=org.gnunet.testbed.messages.HelperInitMes org.gnunet.util.GnunetMessage$Body|483=org.gnunet.testbed.messages.ManagePeerServiceMessage org.gnunet.gns.records.RecordData|65536=org.gnunet.gns.records.PkeyRecordData org.gnunet.gns.records.RecordData|1=org.gnunet.gns.records.ARecordData -# generated 2014/03/30 01:11:14 +# generated 2014/04/08 10:41:17 diff --git a/src/test/java/org/gnunet/dht/DHTTest.java b/src/test/java/org/gnunet/dht/DHTTest.java index f77bd70..676b5bc 100644 --- a/src/test/java/org/gnunet/dht/DHTTest.java +++ b/src/test/java/org/gnunet/dht/DHTTest.java @@ -42,7 +42,7 @@ public class DHTTest extends TestingFixture { final DistributedHashTable dht = new DistributedHashTable(ts.getConfiguration()); dht.put(new HashCode("gnj-test"), new byte[]{1, 2, 3}, 1, EnumSet.noneOf(RouteOption.class), - BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), RelativeTime.FOREVER, new Continuation() { + BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), new Continuation() { @Override public void cont(boolean success) { putFinished.set(true); @@ -67,7 +67,7 @@ public class DHTTest extends TestingFixture { final DistributedHashTable dht = new DistributedHashTable(ts.getConfiguration()); dht.put(hash1, data, 1, EnumSet.noneOf(RouteOption.class), - BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), RelativeTime.FOREVER, new Continuation() { + BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), new Continuation() { @Override public void cont(boolean success) { dht.startGet(RelativeTime.FOREVER, BlockType.TEST.val, hash1, 1, EnumSet.noneOf(RouteOption.class), null, new ResultCallback() { @@ -114,7 +114,7 @@ public class DHTTest extends TestingFixture { Scheduler.addDelayed(new RelativeTime(50), new Scheduler.Task() { @Override public void run(Scheduler.RunContext ctx) { - dht.put(hash, data1, 1, EnumSet.noneOf(RouteOption.class), BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), RelativeTime.FOREVER, null); + dht.put(hash, data1, 1, EnumSet.noneOf(RouteOption.class), BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), null); } }); @@ -122,7 +122,7 @@ public class DHTTest extends TestingFixture { Scheduler.addDelayed(new RelativeTime(100), new Scheduler.Task() { @Override public void run(Scheduler.RunContext ctx) { - dht.put(hash, data2, 1, EnumSet.noneOf(RouteOption.class), BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), RelativeTime.FOREVER, null); + dht.put(hash, data2, 1, EnumSet.noneOf(RouteOption.class), BlockType.TEST.val, RelativeTime.HOUR.toAbsolute(), null); } }); diff --git a/src/test/java/org/gnunet/mesh/MeshTest.java b/src/test/java/org/gnunet/mesh/MeshTest.java index 9287148..18ae9f6 100644 --- a/src/test/java/org/gnunet/mesh/MeshTest.java +++ b/src/test/java/org/gnunet/mesh/MeshTest.java @@ -28,7 +28,7 @@ public class MeshTest extends TestingFixture { PeerIdentity peerIdentity; @Override public void onChannelEnd(Mesh.Channel channel) { - Mesh.Channel myChannel = mesh1.createChannel(peerIdentity, 42, false, true, null); + Mesh.Channel myChannel = mesh1.createChannel(peerIdentity, 42, false, true); myChannel.send(new TestMessage()); } } @@ -58,7 +58,7 @@ public class MeshTest extends TestingFixture { // second mesh handle, used to receive the message final Mesh mesh2 = new Mesh(cfg, new InboundChannelHandler() { @Override - public void onInboundTunnel(Mesh.Channel tunnel, PeerIdentity initiator) { + public void onInboundChannel(Mesh.Channel tunnel, PeerIdentity initiator) { System.out.println("got inbound channel " + initiator); } }, new ChannelEndHandler() { @@ -69,7 +69,7 @@ public class MeshTest extends TestingFixture { }, mh, 42); mh.m1 = mesh1; mh.m2 = mesh2; - Mesh.Channel channel = mesh1.createChannel(peerIdentity, 42, false, true, null); + Mesh.Channel channel = mesh1.createChannel(peerIdentity, 42, false, true); channel.send(new TestMessage()); } }); -- cgit v1.2.3