Commit 831fc1ac authored by Carlos Galindo's avatar Carlos Galindo
Browse files

jinterface 1.13.2

(cherry picked from commit 72d8d8dc)
parent 0d61ec85
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ Available versions:

| JInterface | Erlang versions supported |
|------------|---------------------------|
| 1.13.2     | >=25.3, <26               |
| 1.13.1     | >=25.1, <25.3             |
| 1.13       | >=25, <25.1               |
| 1.12.2     | >=24.3, <25               |
+41 −2
Original line number Diff line number Diff line
/*
 * %CopyrightBegin%
 *
 * Copyright Ericsson AB 2000-2022. All Rights Reserved.
 * Copyright Ericsson AB 2000-2023. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -1033,6 +1033,7 @@ 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());
@@ -1245,11 +1246,26 @@ public abstract class AbstractConnection extends Thread {
            final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);
            byte[] tmpname;
            final int len = tmpbuf.length;
            long flag_mask;

            send_name_tag = ibuf.read1();
            switch (send_name_tag) {
            case 'n':
                if (ibuf.read2BE() != 5)
                    throw new IOException("Invalid handshake version");
                apeer.flags = ibuf.read4BE();
                flag_mask = (1L << 32) - 1;
                if ((apeer.flags & AbstractNode.dFlagHandshake23) == 0)
                    throw new IOException("Missing DFLAG_HANDSHAKE_23");
                apeer.distLow = apeer.distHigh = 6;
                tmpname = new byte[len - 7];
                ibuf.readN(tmpname);
                hisname = OtpErlangString.newString(tmpname);
                break;
            case 'N':
                apeer.distLow = apeer.distHigh = 6;
                apeer.flags = ibuf.read8BE();
                flag_mask = ~0L;
                if ((apeer.flags & AbstractNode.dFlagMandatory25Digest) != 0) {
                    apeer.flags |= AbstractNode.mandatoryFlags25;
                }
@@ -1265,7 +1281,7 @@ public abstract class AbstractConnection extends Thread {
                throw new IOException("Unknown remote node type");
            }

            if ((apeer.flags & AbstractNode.mandatoryFlags) != AbstractNode.mandatoryFlags) {
            if ((~apeer.flags & flag_mask & AbstractNode.mandatoryFlags) != 0) {
                throw new IOException(
                        "Handshake failed - peer cannot handle all mandatory capabilities");
            }
@@ -1336,6 +1352,29 @@ public abstract class AbstractConnection extends Thread {
        return challenge;
    }

    protected void recvComplement(int send_name_tag) throws IOException {

        if (send_name_tag == 'n') {
            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;
                if ((~peer.flags & AbstractNode.mandatoryFlags) != 0) {
                    throw new IOException("Handshake failed - peer missing" +
                                          " mandatory capabilities");
                }
                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 {

+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
	<groupId>program-slicing</groupId>
	<artifactId>erlang-jinterface</artifactId>
	<packaging>jar</packaging>
	<version>1.13.1</version>
	<version>1.13.2</version>
	<name>jinterface</name>
	<description>
		Jinterface Java package contains java classes, which help you integrate programs written in Java with Erlang.