summaryrefslogtreecommitdiff
path: root/lib/jinterface
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2022-04-01 14:39:37 +0200
committerSverker Eriksson <sverker@erlang.org>2022-04-04 20:06:00 +0200
commitcdd868b44792e878be781e37ce3a38375f0b22e9 (patch)
treedfeddd866eea1f85beaef35dbe13e4e6a56d959b /lib/jinterface
parentc804bd8c7f840ecfa2397c836235363c112d79b4 (diff)
downloaderlang-cdd868b44792e878be781e37ce3a38375f0b22e9.tar.gz
jinterface: Remove old distribution handshake
Diffstat (limited to 'lib/jinterface')
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java130
-rw-r--r--lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java6
2 files changed, 24 insertions, 112 deletions
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
index 14a09ce65f..5949bce166 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java
@@ -1033,7 +1033,6 @@ public abstract class AbstractConnection extends Thread {
sendStatus("ok");
final int our_challenge = genChallenge();
sendChallenge(peer.flags, localNode.flags, our_challenge);
- recvComplement(send_name_tag);
final int her_challenge = recvChallengeReply(our_challenge);
final byte[] our_digest = genDigest(her_challenge,
localNode.cookie());
@@ -1090,7 +1089,6 @@ public abstract class AbstractConnection extends Thread {
final byte[] our_digest = genDigest(her_challenge,
localNode.cookie());
final int our_challenge = genChallenge();
- sendComplement(send_name_tag);
sendChallengeReply(our_challenge, our_digest);
recvChallengeAck(our_challenge);
cookieOk = true;
@@ -1182,79 +1180,36 @@ public abstract class AbstractConnection extends Thread {
final OtpOutputStream obuf = new OtpOutputStream();
final String str = localNode.node();
int send_name_tag;
- if (dist == 5) {
- obuf.write2BE(1+2+4 + str.length());
- send_name_tag = 'n';
- obuf.write1(send_name_tag);
- obuf.write2BE(dist);
- obuf.write4BE(aflags);
- obuf.write(str.getBytes());
- }
- else {
- obuf.write2BE(1+8+4+2 + str.length());
- send_name_tag = 'N';
- obuf.write1(send_name_tag);
- obuf.write8BE(aflags);
- obuf.write4BE(creation);
- obuf.write2BE(str.length());
- obuf.write(str.getBytes());
- }
+ obuf.write2BE(1+8+4+2 + str.length());
+ send_name_tag = 'N';
+ obuf.write1(send_name_tag);
+ obuf.write8BE(aflags);
+ obuf.write4BE(creation);
+ obuf.write2BE(str.length());
+ obuf.write(str.getBytes());
obuf.writeToAndFlush(socket.getOutputStream());
if (traceLevel >= handshakeThreshold) {
System.out.println("-> " + "HANDSHAKE sendName" + " flags="
- + aflags + " dist=" + dist + " local=" + localNode);
+ + aflags + " local=" + localNode);
}
return send_name_tag;
}
- protected void sendComplement(final int send_name_tag)
- throws IOException {
-
- if (send_name_tag == 'n' &&
- (peer.flags & AbstractNode.dFlagHandshake23) != 0) {
- @SuppressWarnings("resource")
- final OtpOutputStream obuf = new OtpOutputStream();
- obuf.write2BE(1+4+4);
- obuf.write1('c');
- final int flagsHigh = (int)(localNode.flags >> 32);
- obuf.write4BE(flagsHigh);
- obuf.write4BE(localNode.creation());
-
- obuf.writeToAndFlush(socket.getOutputStream());
-
- if (traceLevel >= handshakeThreshold) {
- System.out.println("-> " + "HANDSHAKE sendComplement" +
- " flagsHigh=" + flagsHigh +
- " creation=" + localNode.creation());
- }
- }
- }
-
protected void sendChallenge(final long her_flags, final long our_flags,
final int challenge) throws IOException {
@SuppressWarnings("resource")
final OtpOutputStream obuf = new OtpOutputStream();
final String str = localNode.node();
- if ((her_flags & AbstractNode.dFlagHandshake23) == 0) {
- obuf.write2BE(1+2+4+4 + str.length());
- obuf.write1('n');
- obuf.write2BE(5);
- obuf.write4BE(our_flags & 0xffffffff);
- obuf.write4BE(challenge);
- obuf.write(str.getBytes());
- }
- else {
- obuf.write2BE(1+8+4+4+2 + str.length());
- obuf.write1('N');
- obuf.write8BE(our_flags);
- obuf.write4BE(challenge);
- obuf.write4BE(localNode.creation());
- obuf.write2BE(str.length());
- obuf.write(str.getBytes());
- }
+ obuf.write2BE(1+8+4+4+2 + str.length());
+ obuf.write1('N');
+ obuf.write8BE(our_flags);
+ obuf.write4BE(challenge);
+ obuf.write4BE(localNode.creation());
+ obuf.write2BE(str.length());
+ obuf.write(str.getBytes());
obuf.writeToAndFlush(socket.getOutputStream());
@@ -1292,18 +1247,12 @@ public abstract class AbstractConnection extends Thread {
final int len = tmpbuf.length;
send_name_tag = ibuf.read1();
switch (send_name_tag) {
- case 'n':
- apeer.distLow = apeer.distHigh = ibuf.read2BE();
- if (apeer.distLow != 5)
- throw new IOException("Invalid handshake version");
- apeer.flags = ibuf.read4BE();
- tmpname = new byte[len - 7];
- ibuf.readN(tmpname);
- hisname = OtpErlangString.newString(tmpname);
- break;
case 'N':
apeer.distLow = apeer.distHigh = 6;
apeer.flags = ibuf.read8BE();
+ if ((apeer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
+ apeer.flags |= AbstractNode.mandatoryFlags25;
+ }
if ((apeer.flags & AbstractNode.dFlagHandshake23) == 0)
throw new IOException("Missing DFLAG_HANDSHAKE_23");
apeer.setCreation(ibuf.read4BE());
@@ -1316,10 +1265,6 @@ public abstract class AbstractConnection extends Thread {
throw new IOException("Unknown remote node type");
}
- if ((apeer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
- apeer.flags |= AbstractNode.mandatoryFlags25;
- }
-
if ((apeer.flags & AbstractNode.mandatoryFlags) != AbstractNode.mandatoryFlags) {
throw new IOException(
"Handshake failed - peer cannot handle all mandatory capabilities");
@@ -1351,19 +1296,12 @@ public abstract class AbstractConnection extends Thread {
final OtpInputStream ibuf = new OtpInputStream(buf, 0);
int namelen;
switch (ibuf.read1()) {
- case 'n':
- if (peer.distChoose != 5)
- throw new IOException("Old challenge wrong version");
- peer.distLow = peer.distHigh = ibuf.read2BE();
- peer.flags = ibuf.read4BE();
- if ((peer.flags & AbstractNode.dFlagHandshake23) != 0)
- throw new IOException("Old challenge unexpected DFLAG_HANDHAKE_23");
- challenge = ibuf.read4BE();
- namelen = buf.length - (1+2+4+4);
- break;
case 'N':
peer.distLow = peer.distHigh = peer.distChoose = 6;
peer.flags = ibuf.read8BE();
+ if ((peer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
+ peer.flags |= AbstractNode.mandatoryFlags25;
+ }
if ((peer.flags & AbstractNode.dFlagHandshake23) == 0)
throw new IOException("New challenge missing DFLAG_HANDHAKE_23");
challenge = ibuf.read4BE();
@@ -1380,11 +1318,6 @@ public abstract class AbstractConnection extends Thread {
throw new IOException(
"Handshake failed - peer has wrong name: " + hisname);
}
-
- if ((peer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
- peer.flags |= AbstractNode.mandatoryFlags25;
- }
-
if ((peer.flags & AbstractNode.mandatoryFlags) != AbstractNode.mandatoryFlags) {
throw new IOException(
"Handshake failed - peer cannot handle all mandatory capabilities");
@@ -1403,27 +1336,6 @@ public abstract class AbstractConnection extends Thread {
return challenge;
}
- protected void recvComplement(int send_name_tag) throws IOException {
-
- if (send_name_tag == 'n' &&
- (peer.flags & AbstractNode.dFlagHandshake23) != 0) {
- try {
- final byte[] tmpbuf = read2BytePackage();
- @SuppressWarnings("resource")
- final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);
- if (ibuf.read1() != 'c')
- throw new IOException("Not a complement tag");
-
- final long flagsHigh = ibuf.read4BE();
- peer.flags |= flagsHigh << 32;
- peer.setCreation(ibuf.read4BE());
-
- } catch (final OtpErlangDecodeException e) {
- throw new IOException("Handshake failed - not enough data");
- }
- }
- }
-
protected void sendChallengeReply(final int challenge, final byte[] digest)
throws IOException {
diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
index 7e8355dcc6..179511c0a5 100644
--- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
+++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java
@@ -108,7 +108,8 @@ public class AbstractNode implements OtpTransportFactory {
| dFlagNewFloats
| dFlagMapTag
| dFlagExportPtrTag
- | dFlagBitBinaries;
+ | dFlagBitBinaries
+ | dFlagHandshake23;
/* Mandatory flags for distribution. Keep them in sync with
DFLAG_DIST_MANDATORY in erts/emulator/beam/dist.h. */
@@ -117,10 +118,9 @@ public class AbstractNode implements OtpTransportFactory {
int ntype = NTYPE_R6;
int proto = 0; // tcp/ip
int distHigh = 6;
- int distLow = 5; // Cannot talk to nodes before R6
+ int distLow = 6; // Cannot talk to nodes before OTP 23
private int creation = 0x710000;
long flags = mandatoryFlags
- | dFlagHandshake23
| dFlagUnlinkId
| dFlagV4PidsRefs
| dFlagMandatory25Digest;