Partial implementation of the invitation protocol (untested).

This commit is contained in:
akwizgran
2012-02-23 23:18:25 +00:00
parent 34cd8cddc3
commit c316ebcf7a
24 changed files with 586 additions and 74 deletions

View File

@@ -25,6 +25,7 @@ import javax.microedition.io.StreamConnectionNotifier;
import net.sf.briar.api.ContactId;
import net.sf.briar.api.TransportProperties;
import net.sf.briar.api.crypto.PseudoRandom;
import net.sf.briar.api.plugins.PluginExecutor;
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
@@ -304,22 +305,25 @@ class BluetoothPlugin implements DuplexPlugin {
return true;
}
public DuplexTransportConnection sendInvitation(int code, long timeout) {
return createInvitationConnection(code, timeout);
public DuplexTransportConnection sendInvitation(PseudoRandom r,
long timeout) {
return createInvitationConnection(r, timeout);
}
public DuplexTransportConnection acceptInvitation(int code, long timeout) {
return createInvitationConnection(code, timeout);
public DuplexTransportConnection acceptInvitation(PseudoRandom r,
long timeout) {
return createInvitationConnection(r, timeout);
}
private DuplexTransportConnection createInvitationConnection(int code,
private DuplexTransportConnection createInvitationConnection(PseudoRandom r,
long timeout) {
synchronized(this) {
if(!running) return null;
}
// Use the invitation code to generate the UUID
String uuid = StringUtils.toHexString(r.nextBytes(16));
// The invitee's device may not be discoverable, so both parties must
// try to initiate connections
String uuid = convertInvitationCodeToUuid(code);
final ConnectionCallback c = new ConnectionCallback(uuid, timeout);
pluginExecutor.execute(new Runnable() {
public void run() {
@@ -342,12 +346,6 @@ class BluetoothPlugin implements DuplexPlugin {
}
}
private String convertInvitationCodeToUuid(int code) {
byte[] b = new byte[16];
new Random(code).nextBytes(b);
return StringUtils.toHexString(b);
}
private void createInvitationConnection(ConnectionCallback c) {
LocalDevice localDevice;
synchronized(this) {