Search in sources :

Example 66 with Message

use of org.jgroups.Message in project JGroups by belaban.

the class FRAG3 method up.

public void up(MessageBatch batch) {
    for (Message msg : batch) {
        Frag3Header hdr = msg.getHeader(this.id);
        if (hdr != null) {
            // needs to be defragmented
            Message assembled_msg = unfragment(msg, hdr);
            if (assembled_msg != null) {
                // the reassembled msg has to be add in the right place (https://issues.jboss.org/browse/JGRP-1648),
                // and canot be added to the tail of the batch !
                batch.replace(msg, assembled_msg);
                avg_size_up.add(assembled_msg.length());
            } else
                batch.remove(msg);
        }
    }
    if (!batch.isEmpty())
        up_prot.up(batch);
}
Also used : Message(org.jgroups.Message)

Example 67 with Message

use of org.jgroups.Message in project JGroups by belaban.

the class SASL method up.

@Override
public Object up(Message msg) {
    SaslHeader saslHeader = msg.getHeader(SASL_ID);
    GmsHeader gmsHeader = msg.getHeader(GMS_ID);
    Address remoteAddress = msg.getSrc();
    if (needsAuthentication(gmsHeader, remoteAddress)) {
        if (saslHeader == null)
            throw new IllegalStateException("Found GMS join or merge request but no SASL header");
        if (!serverChallenge(gmsHeader, saslHeader, msg))
            // failed auth, don't pass up
            return null;
    } else if (saslHeader != null) {
        SaslContext saslContext = sasl_context.get(remoteAddress);
        if (saslContext == null) {
            throw new IllegalStateException(String.format("Cannot find server context to challenge SASL request from %s", remoteAddress.toString()));
        }
        switch(saslHeader.getType()) {
            case CHALLENGE:
                try {
                    if (log.isTraceEnabled())
                        log.trace("%s: received CHALLENGE from %s", getAddress(), remoteAddress);
                    // the response computed can be null if the challenge-response cycle has ended
                    Message response = saslContext.nextMessage(remoteAddress, saslHeader);
                    if (response != null) {
                        if (log.isTraceEnabled())
                            log.trace("%s: sending RESPONSE to %s", getAddress(), remoteAddress);
                        down_prot.down(response);
                    } else {
                        if (!saslContext.isSuccessful()) {
                            throw new SaslException("computed response is null but challenge-response cycle not complete!");
                        }
                        if (log.isTraceEnabled())
                            log.trace("%s: authentication complete from %s", getAddress(), remoteAddress);
                    }
                } catch (SaslException e) {
                    disposeContext(remoteAddress);
                    if (log.isWarnEnabled()) {
                        log.warn(getAddress() + ": failed to validate CHALLENGE from " + remoteAddress + ", token", e);
                    }
                }
                break;
            case RESPONSE:
                try {
                    if (log.isTraceEnabled())
                        log.trace("%s: received RESPONSE from %s", getAddress(), remoteAddress);
                    Message challenge = saslContext.nextMessage(remoteAddress, saslHeader);
                    // the challenge computed can be null if the challenge-response cycle has ended
                    if (challenge != null) {
                        if (log.isTraceEnabled())
                            log.trace("%s: sending CHALLENGE to %s", getAddress(), remoteAddress);
                        down_prot.down(challenge);
                    } else {
                        if (!saslContext.isSuccessful()) {
                            throw new SaslException("computed challenge is null but challenge-response cycle not complete!");
                        }
                        if (log.isTraceEnabled())
                            log.trace("%s: authentication complete from %s", getAddress(), remoteAddress);
                    }
                } catch (SaslException e) {
                    disposeContext(remoteAddress);
                    if (log.isWarnEnabled()) {
                        log.warn("failed to validate RESPONSE from " + remoteAddress + ", token", e);
                    }
                }
                break;
        }
        return null;
    }
    return up_prot.up(msg);
}
Also used : Address(org.jgroups.Address) Message(org.jgroups.Message) GmsHeader(org.jgroups.protocols.pbcast.GMS.GmsHeader) SaslException(javax.security.sasl.SaslException) SaslContext(org.jgroups.auth.sasl.SaslContext)

Example 68 with Message

use of org.jgroups.Message in project JGroups by belaban.

the class SASL method up.

@Override
public void up(MessageBatch batch) {
    for (Message msg : batch) {
        // If we have a join or merge request --> authenticate, else pass up
        GmsHeader gmsHeader = msg.getHeader(GMS_ID);
        Address remoteAddress = msg.getSrc();
        if (needsAuthentication(gmsHeader, remoteAddress)) {
            SaslHeader saslHeader = msg.getHeader(id);
            if (saslHeader == null) {
                log.warn("Found GMS join or merge request but no SASL header");
                sendRejectionMessage(gmsHeader.getType(), batch.sender(), "join or merge without an SASL header");
                batch.remove(msg);
            } else if (// authentication failed
            !serverChallenge(gmsHeader, saslHeader, msg))
                // don't pass up
                batch.remove(msg);
        }
    }
    if (!batch.isEmpty())
        up_prot.up(batch);
}
Also used : Message(org.jgroups.Message) Address(org.jgroups.Address) GmsHeader(org.jgroups.protocols.pbcast.GMS.GmsHeader)

Example 69 with Message

use of org.jgroups.Message in project JGroups by belaban.

the class SASL method sendJoinRejectionMessage.

protected void sendJoinRejectionMessage(Address dest, String error_msg) {
    if (dest == null)
        return;
    // specify the error message on the JoinRsp
    JoinRsp joinRes = new JoinRsp(error_msg);
    Message msg = new Message(dest).putHeader(GMS_ID, new GmsHeader(GmsHeader.JOIN_RSP)).setBuffer(GMS.marshal(joinRes));
    down_prot.down(msg);
}
Also used : JoinRsp(org.jgroups.protocols.pbcast.JoinRsp) Message(org.jgroups.Message) GmsHeader(org.jgroups.protocols.pbcast.GMS.GmsHeader)

Example 70 with Message

use of org.jgroups.Message in project JGroups by belaban.

the class SASL method sendMergeRejectionMessage.

protected void sendMergeRejectionMessage(Address dest) {
    Message msg = new Message(dest).setFlag(Message.Flag.OOB);
    GmsHeader hdr = new GmsHeader(GmsHeader.MERGE_RSP);
    hdr.setMergeRejected(true);
    msg.putHeader(GMS_ID, hdr);
    if (log.isDebugEnabled())
        log.debug("merge response=" + hdr);
    down_prot.down(msg);
}
Also used : Message(org.jgroups.Message) GmsHeader(org.jgroups.protocols.pbcast.GMS.GmsHeader)

Aggregations

Message (org.jgroups.Message)246 Address (org.jgroups.Address)50 MessageBatch (org.jgroups.util.MessageBatch)37 BytesMessage (org.jgroups.BytesMessage)31 NioMessage (org.jgroups.NioMessage)14 ObjectMessage (org.jgroups.ObjectMessage)14 EmptyMessage (org.jgroups.EmptyMessage)12 Test (org.testng.annotations.Test)12 Event (org.jgroups.Event)11 ToaHeader (org.jgroups.protocols.tom.ToaHeader)11 Test (org.junit.Test)11 IOException (java.io.IOException)8 JChannel (org.jgroups.JChannel)8 MessageID (org.jgroups.protocols.tom.MessageID)8 DistributionMessage (org.apache.geode.distributed.internal.DistributionMessage)7 JoinRequestMessage (org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage)7 JoinResponseMessage (org.apache.geode.distributed.internal.membership.gms.messages.JoinResponseMessage)7 TimeoutException (java.util.concurrent.TimeoutException)6 Collectors (java.util.stream.Collectors)6 MembershipTest (org.apache.geode.test.junit.categories.MembershipTest)6