Search in sources :

Example 1 with POOpen

use of com.swiftmq.amqp.v100.client.po.POOpen in project swiftmq-client by iitsoftware.

the class Connection method connect.

/**
 * Performs the actual connect to the remote host, negotiates the protocol and authenticates the user
 *
 * @throws IOException                         if an IOExcption occurs
 * @throws UnsupportedProtocolVersionException if the AMQP/SASL protocol version is not supported by the remote host
 * @throws AuthenticationException             if the user cannot be authenticated
 * @throws ConnectionClosedException           if the connection was closed
 */
public void connect() throws IOException, UnsupportedProtocolVersionException, AuthenticationException, ConnectionClosedException {
    verifyState();
    connectionDispatcher = new ConnectionDispatcher(ctx, hostname);
    if (socketFactory instanceof SocketFactory2)
        ((SocketFactory2) socketFactory).setReceiveBufferSize(inputBufferSize);
    networkConnection = new BlockingConnection(socketFactory.createSocket(hostname, port), connectionDispatcher, this) {

        protected ProtocolOutputHandler createOutputHandler(int outputBufferSize, int outputExtendSize) {
            return new RawOutputHandler(outputBufferSize, outputExtendSize) {

                public void flush() throws IOException {
                    super.flush();
                    invokeOutputListener();
                }
            };
        }

        protected ProtocolInputHandler createInputHandler() {
            return connectionDispatcher.getProtocolHandler();
        }
    };
    connectionDispatcher.setMyConnection(this);
    networkConnection.start();
    dos = new DataStreamOutputStream(networkConnection.getOutputStream());
    connectionPool = ctx.getConnectionPool();
    connectionTask = new ConnectionTask();
    connectionQueue = new ConnectionQueue();
    connectionDispatcher.setOutboundHandler(connectionQueue);
    connectionQueue.startQueue();
    // SASL
    if (doAuth) {
        connectionDispatcher.setSaslActive(true);
        Semaphore sem = new Semaphore();
        POObject po = new POProtocolRequest(sem, Util.SASL_INIT);
        connectionDispatcher.dispatch(po);
        sem.waitHere();
        sem.reset();
        if (!po.isSuccess()) {
            cancel();
            throw new UnsupportedProtocolVersionException(po.getException());
        }
        po = new POAuthenticate(sem, mechanism, userName, password);
        connectionDispatcher.dispatch(po);
        sem.waitHere();
        sem.reset();
        if (!po.isSuccess()) {
            cancel();
            throw new AuthenticationException(po.getException());
        }
    }
    // AMQP
    Semaphore sem = new Semaphore();
    POObject po = new POProtocolRequest(sem, Util.AMQP_INIT);
    connectionDispatcher.dispatch(po);
    sem.waitHere();
    sem.reset();
    if (!po.isSuccess()) {
        cancel();
        throw new UnsupportedProtocolVersionException(po.getException());
    }
    // Open
    po = new POOpen(sem, containerId, maxFrameSize, 255, idleTimeout);
    connectionDispatcher.dispatch(po);
    sem.waitHere();
    sem.reset();
    if (!po.isSuccess()) {
        cancel();
        throw new IOException(po.getException());
    }
    connected = true;
}
Also used : ProtocolInputHandler(com.swiftmq.net.protocol.ProtocolInputHandler) ProtocolOutputHandler(com.swiftmq.net.protocol.ProtocolOutputHandler) POProtocolRequest(com.swiftmq.amqp.v100.client.po.POProtocolRequest) SocketFactory2(com.swiftmq.net.SocketFactory2) DataStreamOutputStream(com.swiftmq.tools.util.DataStreamOutputStream) RawOutputHandler(com.swiftmq.net.protocol.raw.RawOutputHandler) IOException(java.io.IOException) Semaphore(com.swiftmq.tools.concurrent.Semaphore) POAuthenticate(com.swiftmq.amqp.v100.client.po.POAuthenticate) POOpen(com.swiftmq.amqp.v100.client.po.POOpen) BlockingConnection(com.swiftmq.net.client.BlockingConnection) POObject(com.swiftmq.tools.pipeline.POObject)

Example 2 with POOpen

use of com.swiftmq.amqp.v100.client.po.POOpen in project swiftmq-client by iitsoftware.

the class ConnectionDispatcher method visit.

public void visit(POOpen po) {
    if (pTracer.isEnabled())
        pTracer.trace(toString(), ", visit, po=" + po + " ...");
    openPO = po;
    try {
        OpenFrame openFrame = new OpenFrame(0);
        openFrame.setContainerId(new AMQPString(po.getContainerId()));
        openFrame.setChannelMax(new AMQPUnsignedShort(po.getMaxChannel()));
        if (myConnection.getOpenHostname() == null)
            openFrame.setHostname(new AMQPString(remoteHostname));
        else
            openFrame.setHostname(new AMQPString(myConnection.getOpenHostname()));
        maxLocalFrameSize = po.getMaxFrameSize() > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) po.getMaxFrameSize();
        openFrame.setMaxFrameSize(new AMQPUnsignedInt(maxLocalFrameSize));
        myIdleTimeout = po.getIdleTimeout();
        if (myIdleTimeout > 0) {
            openFrame.setIdleTimeOut(new Milliseconds(myIdleTimeout));
            idleTimeoutDelay = po.getIdleTimeout() / 2;
            idleTimeoutChecker = new TimerListener() {

                public void performTimeAction(TimerEvent evt) {
                    dispatch(new POCheckIdleTimeout(null));
                }
            };
            TimerRegistry.Singleton().addTimerListener(idleTimeoutDelay, idleTimeoutChecker);
        }
        outboundHandler.send(openFrame);
    } catch (Exception e) {
        e.printStackTrace();
    }
    checkBothSidesOpen();
    if (pTracer.isEnabled())
        pTracer.trace(toString(), ", visit, po=" + po + " done");
}
Also used : TimerEvent(com.swiftmq.tools.timer.TimerEvent) TimerListener(com.swiftmq.tools.timer.TimerListener) Milliseconds(com.swiftmq.amqp.v100.generated.transport.definitions.Milliseconds) SaslException(javax.security.sasl.SaslException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException)

Aggregations

IOException (java.io.IOException)2 POAuthenticate (com.swiftmq.amqp.v100.client.po.POAuthenticate)1 POOpen (com.swiftmq.amqp.v100.client.po.POOpen)1 POProtocolRequest (com.swiftmq.amqp.v100.client.po.POProtocolRequest)1 Milliseconds (com.swiftmq.amqp.v100.generated.transport.definitions.Milliseconds)1 SocketFactory2 (com.swiftmq.net.SocketFactory2)1 BlockingConnection (com.swiftmq.net.client.BlockingConnection)1 ProtocolInputHandler (com.swiftmq.net.protocol.ProtocolInputHandler)1 ProtocolOutputHandler (com.swiftmq.net.protocol.ProtocolOutputHandler)1 RawOutputHandler (com.swiftmq.net.protocol.raw.RawOutputHandler)1 Semaphore (com.swiftmq.tools.concurrent.Semaphore)1 POObject (com.swiftmq.tools.pipeline.POObject)1 TimerEvent (com.swiftmq.tools.timer.TimerEvent)1 TimerListener (com.swiftmq.tools.timer.TimerListener)1 DataStreamOutputStream (com.swiftmq.tools.util.DataStreamOutputStream)1 UnknownHostException (java.net.UnknownHostException)1 SaslException (javax.security.sasl.SaslException)1