Skip to content

Commit 4de5aef

Browse files
committed
Break pattern modifiers out into their own methods
1 parent f14d7bd commit 4de5aef

File tree

1 file changed

+56
-35
lines changed

1 file changed

+56
-35
lines changed

src/main/java/com/eatthepath/noise/HandshakePattern.java

Lines changed: 56 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -476,48 +476,69 @@ static List<String> getModifiers(final String fullPatternName) {
476476
}
477477

478478
HandshakePattern withModifier(final String modifier) {
479-
final MessagePattern[] modifiedPreMessagePatterns;
480-
final MessagePattern[] modifiedHandshakeMessagePatterns;
479+
final MessagePattern[][] modifiedMessagePatterns;
481480

482481
if ("fallback".equals(modifier)) {
483-
if (!isValidFallbackMessagePattern(handshakeMessagePatterns[0])) {
484-
throw new IllegalStateException("Cannot generate fallback pattern; first message pattern is not a fallback-eligible message pattern");
485-
}
482+
modifiedMessagePatterns = getPatternsWithFallbackModifier();
483+
} else if (modifier.startsWith("psk")) {
484+
modifiedMessagePatterns = getPatternsWithPskModifier(modifier);
485+
} else {
486+
throw new IllegalArgumentException("Unrecognized modifier: " + modifier);
487+
}
486488

487-
modifiedPreMessagePatterns = new MessagePattern[getPreMessagePatterns().length + 1];
488-
modifiedHandshakeMessagePatterns = new MessagePattern[getHandshakeMessagePatterns().length - 1];
489+
assert modifiedMessagePatterns.length == 2;
489490

490-
System.arraycopy(getPreMessagePatterns(), 0, modifiedPreMessagePatterns, 0, getPreMessagePatterns().length);
491-
modifiedPreMessagePatterns[modifiedPreMessagePatterns.length - 1] = getHandshakeMessagePatterns()[0];
491+
return new HandshakePattern(getModifiedName(modifier), modifiedMessagePatterns[0], modifiedMessagePatterns[1]);
492+
}
492493

493-
System.arraycopy(getHandshakeMessagePatterns(), 1, modifiedHandshakeMessagePatterns, 0, getHandshakeMessagePatterns().length - 1);
494-
} else if (modifier.startsWith("psk")) {
495-
final int pskIndex = Integer.parseInt(modifier.substring("psk".length()));
496-
497-
modifiedPreMessagePatterns = getPreMessagePatterns().clone();
498-
modifiedHandshakeMessagePatterns = getHandshakeMessagePatterns().clone();
499-
500-
if (pskIndex == 0) {
501-
// Insert a PSK token at the start of the first message
502-
final Token[] originalTokens = modifiedHandshakeMessagePatterns[0].tokens();
503-
final Token[] modifiedTokens = new Token[originalTokens.length + 1];
504-
modifiedTokens[0] = Token.PSK;
505-
System.arraycopy(originalTokens, 0, modifiedTokens, 1, originalTokens.length);
506-
507-
modifiedHandshakeMessagePatterns[0] = new MessagePattern(modifiedHandshakeMessagePatterns[0].sender, modifiedTokens);
508-
} else {
509-
// Insert a PSK at the end of the N-1st message
510-
final Token[] originalTokens = modifiedHandshakeMessagePatterns[pskIndex - 1].tokens();
511-
final Token[] modifiedTokens = new Token[originalTokens.length + 1];
512-
modifiedTokens[modifiedTokens.length - 1] = Token.PSK;
513-
System.arraycopy(originalTokens, 0, modifiedTokens, 0, originalTokens.length);
514-
515-
modifiedHandshakeMessagePatterns[pskIndex - 1] = new MessagePattern(modifiedHandshakeMessagePatterns[pskIndex - 1].sender, modifiedTokens);
516-
}
494+
private MessagePattern[][] getPatternsWithFallbackModifier() {
495+
if (!isValidFallbackMessagePattern(handshakeMessagePatterns[0])) {
496+
throw new IllegalStateException("Cannot generate fallback pattern; first message pattern is not a fallback-eligible message pattern");
497+
}
498+
499+
final MessagePattern[] modifiedPreMessagePatterns = new MessagePattern[getPreMessagePatterns().length + 1];
500+
final MessagePattern[] modifiedHandshakeMessagePatterns =
501+
new MessagePattern[getHandshakeMessagePatterns().length - 1];
502+
503+
System.arraycopy(getPreMessagePatterns(), 0, modifiedPreMessagePatterns, 0, getPreMessagePatterns().length);
504+
modifiedPreMessagePatterns[modifiedPreMessagePatterns.length - 1] = getHandshakeMessagePatterns()[0];
505+
506+
System.arraycopy(getHandshakeMessagePatterns(), 1, modifiedHandshakeMessagePatterns,
507+
0, getHandshakeMessagePatterns().length - 1);
508+
509+
return new MessagePattern[][] { modifiedPreMessagePatterns, modifiedHandshakeMessagePatterns };
510+
}
511+
512+
private MessagePattern[][] getPatternsWithPskModifier(final String modifier) {
513+
final int pskIndex = Integer.parseInt(modifier.substring("psk".length()));
514+
515+
final MessagePattern[] modifiedPreMessagePatterns = getPreMessagePatterns().clone();
516+
final MessagePattern[] modifiedHandshakeMessagePatterns = getHandshakeMessagePatterns().clone();
517+
518+
if (pskIndex == 0) {
519+
// Insert a PSK token at the start of the first message
520+
final Token[] originalTokens = modifiedHandshakeMessagePatterns[0].tokens();
521+
final Token[] modifiedTokens = new Token[originalTokens.length + 1];
522+
modifiedTokens[0] = Token.PSK;
523+
System.arraycopy(originalTokens, 0, modifiedTokens, 1, originalTokens.length);
524+
525+
modifiedHandshakeMessagePatterns[0] =
526+
new MessagePattern(modifiedHandshakeMessagePatterns[0].sender, modifiedTokens);
517527
} else {
518-
throw new IllegalArgumentException("Unrecognized modifier: " + modifier);
528+
// Insert a PSK at the end of the N-1st message
529+
final Token[] originalTokens = modifiedHandshakeMessagePatterns[pskIndex - 1].tokens();
530+
final Token[] modifiedTokens = new Token[originalTokens.length + 1];
531+
modifiedTokens[modifiedTokens.length - 1] = Token.PSK;
532+
System.arraycopy(originalTokens, 0, modifiedTokens, 0, originalTokens.length);
533+
534+
modifiedHandshakeMessagePatterns[pskIndex - 1] =
535+
new MessagePattern(modifiedHandshakeMessagePatterns[pskIndex - 1].sender, modifiedTokens);
519536
}
520537

538+
return new MessagePattern[][] { modifiedPreMessagePatterns, modifiedHandshakeMessagePatterns };
539+
}
540+
541+
private String getModifiedName(final String modifier) {
521542
final String modifiedName;
522543

523544
if (getName().equals(getFundamentalPatternName(getName()))) {
@@ -527,7 +548,7 @@ HandshakePattern withModifier(final String modifier) {
527548
modifiedName = getName() + "+" + modifier;
528549
}
529550

530-
return new HandshakePattern(modifiedName, modifiedPreMessagePatterns, modifiedHandshakeMessagePatterns);
551+
return modifiedName;
531552
}
532553

533554
static boolean isValidFallbackMessagePattern(final MessagePattern messagePattern) {

0 commit comments

Comments
 (0)