Skip to content

Commit

Permalink
Merge pull request #2900 from thelsing/feature-webrtc
Browse files Browse the repository at this point in the history
fix connection establishment
  • Loading branch information
Phergus authored Aug 19, 2021
2 parents a85fcde + da52fdf commit 36038d8
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 69 deletions.
38 changes: 23 additions & 15 deletions src/main/java/net/rptools/maptool/client/AppActions.java
Original file line number Diff line number Diff line change
Expand Up @@ -2231,28 +2231,34 @@ protected void executeAction() {

// Connect to server
Player.Role playerType = (Player.Role) dialog.getRoleCombo().getSelectedItem();
Runnable onConnected =
() -> {
// connecting
MapTool.getFrame()
.getConnectionStatusPanel()
.setStatus(ConnectionStatusPanel.Status.server);
MapTool.addLocalMessage(
MessageUtil.getFormattedSystemMsg(
I18N.getText("msg.info.startServer")));
};

if (playerType == Player.Role.GM) {
MapTool.createConnection(
config,
new LocalPlayer(
dialog.getUsernameTextField().getText(),
playerType,
serverProps.getGMPassword()));
serverProps.getGMPassword()),
onConnected);
} else {
MapTool.createConnection(
config,
new LocalPlayer(
dialog.getUsernameTextField().getText(),
playerType,
serverProps.getPlayerPassword()));
serverProps.getPlayerPassword()),
onConnected);
}

// connecting
MapTool.getFrame()
.getConnectionStatusPanel()
.setStatus(ConnectionStatusPanel.Status.server);
MapTool.addLocalMessage(
MessageUtil.getFormattedSystemMsg(I18N.getText("msg.info.startServer")));
} catch (UnknownHostException uh) {
MapTool.showError("msg.error.invalidLocalhost", uh);
failed = true;
Expand Down Expand Up @@ -2327,20 +2333,22 @@ protected void executeAction() {
dialog.getServer());
MapTool.createConnection(
config,
new LocalPlayer(prefs.getUsername(), prefs.getRole(), prefs.getPassword()));
new LocalPlayer(prefs.getUsername(), prefs.getRole(), prefs.getPassword()),
() -> {
MapTool.getFrame().hideGlassPane();
MapTool.getFrame()
.showFilledGlassPane(
new StaticMessageDialog(I18N.getText("msg.info.campaignLoading")));
});

MapTool.getFrame().hideGlassPane();
MapTool.getFrame()
.showFilledGlassPane(
new StaticMessageDialog(I18N.getText("msg.info.campaignLoading")));
} catch (UnknownHostException e1) {
MapTool.showError("msg.error.unknownHost", e1);
failed = true;
} catch (IOException e1) {
MapTool.showError("msg.error.failedLoadCampaign", e1);
failed = true;
}
if (failed || MapTool.getConnection() == null) {
if (failed) {
MapTool.getFrame().hideGlassPane();
try {
MapTool.startPersonalServer(oldCampaign);
Expand Down
15 changes: 10 additions & 5 deletions src/main/java/net/rptools/maptool/client/MapTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -1162,13 +1162,17 @@ public static void startPersonalServer(Campaign campaign) throws IOException {
// Connect to server
MapTool.createConnection(
config,
new LocalPlayer(username, Player.Role.GM, ServerConfig.getPersonalServerGMPassword()));

// connecting
MapTool.getFrame().getConnectionStatusPanel().setStatus(ConnectionStatusPanel.Status.server);
new LocalPlayer(username, Player.Role.GM, ServerConfig.getPersonalServerGMPassword()),
() -> {
// connecting
MapTool.getFrame()
.getConnectionStatusPanel()
.setStatus(ConnectionStatusPanel.Status.server);
});
}

public static void createConnection(ServerConfig config, LocalPlayer player) throws IOException {
public static void createConnection(ServerConfig config, LocalPlayer player, Runnable onCompleted)
throws IOException {
MapTool.player = player;
MapTool.getFrame().getCommandPanel().clearAllIdentities();

Expand All @@ -1186,6 +1190,7 @@ public static void createConnection(ServerConfig config, LocalPlayer player) thr
}
clientFrame.getLookupTablePanel().updateView();
clientFrame.getInitiativePanel().updateView();
onCompleted.run();
});

clientConn.start();
Expand Down
52 changes: 17 additions & 35 deletions src/main/java/net/rptools/maptool/server/Handshake.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,7 @@ public void triggerHandshake() {
var initialSaltMsg =
InitialSaltMsg.newBuilder().setSalt(ByteString.copyFrom(initialMacSalt)).build();

var handshakeMsg =
HandshakeMsg.newBuilder()
.setType(MessageTypeDto.InitialSalt)
.setInitialSaltMsg(initialSaltMsg)
.build();
var handshakeMsg = HandshakeMsg.newBuilder().setInitialSaltMsg(initialSaltMsg).build();
connection.sendMessage(handshakeMsg.toByteArray());
currentState = State.AwaitingRequest;
}
Expand Down Expand Up @@ -251,10 +247,7 @@ private HandshakeMsg buildRequest(Request request, byte[] macSalt)
.setMac(ByteString.copyFrom(mac))
.build();

return HandshakeMsg.newBuilder()
.setType(MessageTypeDto.HandshakeRequest)
.setHandshakeRequestMsg(req)
.build();
return HandshakeMsg.newBuilder().setHandshakeRequestMsg(req).build();
}

private void sendErrorResponseAndNotify() {
Expand All @@ -263,11 +256,7 @@ private void sendErrorResponseAndNotify() {
.setCode(ResponseCodeDto.ERROR)
.setMessage(errorMessage)
.build();
var msg =
HandshakeMsg.newBuilder()
.setType(MessageTypeDto.HandshakeResponse)
.setHandshakeResponseMsg(responseMsg)
.build();
var msg = HandshakeMsg.newBuilder().setHandshakeResponseMsg(responseMsg).build();
connection.sendMessage(msg.toByteArray());
currentState = State.Error;
notifyObservers();
Expand All @@ -279,26 +268,31 @@ public void handleMessage(String id, byte[] message) {
var handshakeMsg = HandshakeMsg.parseFrom(message);
switch (currentState) {
case AwaitingInitialMacSalt:
if (handshakeMsg.getType() == MessageTypeDto.InitialSalt)
if (handshakeMsg.getMessageTypeCase() == HandshakeMsg.MessageTypeCase.INITIAL_SALT_MSG)
handle(handshakeMsg.getInitialSaltMsg());
break;
case AwaitingRequest:
if (handshakeMsg.getType() == MessageTypeDto.HandshakeRequest)
if (handshakeMsg.getMessageTypeCase()
== HandshakeMsg.MessageTypeCase.HANDSHAKE_REQUEST_MSG)
handle(handshakeMsg.getHandshakeRequestMsg());
break;
case AwaitingChallenge:
if (handshakeMsg.getType() == MessageTypeDto.ChallengeRequest)
if (handshakeMsg.getMessageTypeCase()
== HandshakeMsg.MessageTypeCase.CHALLENGE_REQUEST_MSG)
handle(handshakeMsg.getChallengeRequestMsg());
// we only accept error responses in this state
if (handshakeMsg.getType() == MessageTypeDto.HandshakeResponse
if (handshakeMsg.getMessageTypeCase()
== HandshakeMsg.MessageTypeCase.HANDSHAKE_RESPONSE_MSG
&& handshakeMsg.getHandshakeResponseMsg().getCode() != ResponseCodeDto.OK)
handle(handshakeMsg.getHandshakeResponseMsg());
break;
case AwaitingChallengeResponse:
if (handshakeMsg.getType() == MessageTypeDto.ChallengeResponse)
if (handshakeMsg.getMessageTypeCase()
== HandshakeMsg.MessageTypeCase.CHALLENGE_RESPONSE_MSG)
handle(handshakeMsg.getChallengeResponseMsg());
// we only accept error responses in this state
if (handshakeMsg.getType() == MessageTypeDto.HandshakeResponse
if (handshakeMsg.getMessageTypeCase()
== HandshakeMsg.MessageTypeCase.HANDSHAKE_RESPONSE_MSG
&& handshakeMsg.getHandshakeResponseMsg().getCode() != ResponseCodeDto.OK)
handle(handshakeMsg.getHandshakeResponseMsg());
break;
Expand Down Expand Up @@ -379,11 +373,7 @@ private void handle(HandshakeRequestMsg handshakeRequestMsg)
.setChallenge(ByteString.copyFrom(challenge))
.setMac(ByteString.copyFrom(CipherUtil.getInstance().generateMacAndSalt(passwordToUse)))
.build();
var msg =
HandshakeMsg.newBuilder()
.setType(MessageTypeDto.ChallengeRequest)
.setChallengeRequestMsg(challengeMsg)
.build();
var msg = HandshakeMsg.newBuilder().setChallengeRequestMsg(challengeMsg).build();
connection.sendMessage(msg.toByteArray());
currentState = State.AwaitingChallengeResponse;
}
Expand Down Expand Up @@ -414,11 +404,7 @@ private void handle(ChallengeRequestMsg challengeRequestMsg)
.setMac(
ByteString.copyFrom(CipherUtil.getInstance().generateMacAndSalt(request.password)))
.build();
var msg =
HandshakeMsg.newBuilder()
.setType(MessageTypeDto.ChallengeResponse)
.setChallengeResponseMsg(challengeResp)
.build();
var msg = HandshakeMsg.newBuilder().setChallengeResponseMsg(challengeResp).build();
connection.sendMessage(msg.toByteArray());
currentState = State.AwaitingResponse;
}
Expand Down Expand Up @@ -461,11 +447,7 @@ private void handle(ChallengeResponseMsg challengeResponseMsg)
.setRole(role)
.build();

var msg =
HandshakeMsg.newBuilder()
.setType(MessageTypeDto.HandshakeResponse)
.setHandshakeResponseMsg(responseMsg)
.build();
var msg = HandshakeMsg.newBuilder().setHandshakeResponseMsg(responseMsg).build();
connection.sendMessage(msg.toByteArray());
notifyObservers();
}
Expand Down
21 changes: 7 additions & 14 deletions src/main/proto/handshake.proto
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,14 @@ option java_outer_classname = "HandshakeProtos";
* protobuf classes end with "Dto" or "Msg".
*/

enum MessageTypeDto {
InitialSalt = 0;
HandshakeRequest = 1;
HandshakeResponse = 2;
ChallengeRequest = 3;
ChallengeResponse = 4;
}

message HandshakeMsg {
MessageTypeDto type = 1;
InitialSaltMsg initial_salt_msg = 2;
HandshakeRequestMsg handshake_request_msg = 3;
HandshakeResponseMsg handshake_response_msg = 4;
ChallengeRequestMsg challenge_request_msg = 5;
ChallengeResponseMsg challenge_response_msg = 6;
oneof message_type {
InitialSaltMsg initial_salt_msg = 1;
HandshakeRequestMsg handshake_request_msg = 2;
HandshakeResponseMsg handshake_response_msg = 3;
ChallengeRequestMsg challenge_request_msg = 4;
ChallengeResponseMsg challenge_response_msg = 5;
}
}

message InitialSaltMsg {
Expand Down

0 comments on commit 36038d8

Please sign in to comment.