/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.transport.jms.common;
import java.net.ProtocolException;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Session;
import de.rcenvironment.core.communication.channel.ServerContactPoint;
import de.rcenvironment.core.communication.model.InitialNodeInformation;
import de.rcenvironment.core.communication.transport.spi.MessageChannel;
/**
* Factory interface for remote-initiated {@link MessageChannel}s.
*
* @author Robert Mischke
*/
public interface RemoteInitiatedMessageChannelFactory {
/**
* Creates a remote-initiated outgoing connection.
*
* @param receivingNodeInformation the node information for the receiver of the original connection (ie, the local node)
* @param remoteHandshakeInformation the handshake information for the initiator of the original connection (ie, the remote node)
* @param ownHandshakeInformation the container for the local node's handshake information; used to transport temp queue information
* @param associatedSCP the {@link ServerContactPoint} the original connection was made to
* @param localJmsConnection an established JMS connection to the matching JMS broker
* @param session the session of the incoming request
* @return the created {@link AbstractJmsMessageChannel}
* @throws JMSException on JMS errors
* @throws ProtocolException on errors in the expected handshake information
*/
JmsMessageChannel createRemoteInitiatedMessageChannel(InitialNodeInformation receivingNodeInformation,
JMSHandshakeInformation remoteHandshakeInformation, JMSHandshakeInformation ownHandshakeInformation,
ServerContactPoint associatedSCP, Connection localJmsConnection, Session session) throws JMSException, ProtocolException;
}