Package org.freeswitch.esl.client.inbound

Source Code of org.freeswitch.esl.client.inbound.InboundClientHandler

/*
* Copyright 2010 david varnes.
*
* Licensed under the Apache License, version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.freeswitch.esl.client.inbound;

import org.freeswitch.esl.client.internal.AbstractEslClientHandler;
import org.freeswitch.esl.client.internal.IEslProtocolListener;
import org.freeswitch.esl.client.transport.CommandResponse;
import org.freeswitch.esl.client.transport.event.EslEvent;
import org.freeswitch.esl.client.transport.message.EslHeaders.Value;
import org.freeswitch.esl.client.transport.message.EslMessage;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.execution.ExecutionHandler;

/**
* End users of the inbound {@link Client} should not need to use this class.
* <p>
* Specialised {@link AbstractEslClientHandler} that implements the connection logic for an
* 'Inbound' FreeSWITCH Event Socket connection.  The responsibilities for this class are:
* <ul><li>
* To handle the auth request that the FreeSWITCH server will send immediately following a new
* connection when mode is Inbound.
* <li>
* To signal the observing {@link IEslProtocolListener} (expected to be the Inbound client
* implementation) when ESL events are received.
* </ul>
* Note: implementation requirement is that an {@link ExecutionHandler} is placed in the processing
* pipeline prior to this handler. This will ensure that each incoming message is processed in its
* own thread (although still guaranteed to be processed in the order of receipt).
*
* @author  david varnes
*/
public class InboundClientHandler extends AbstractEslClientHandler
{
    private final String password;
    private final IEslProtocolListener listener;
   
    public InboundClientHandler( String password, IEslProtocolListener listener )
    {
        this.password = password;
        this.listener = listener;
    }
   
    protected void handleEslEvent( ChannelHandlerContext ctx, EslEvent event )
    {
        log.debug( "Received event: [{}]", event );
        listener.eventReceived( event );
    }

    protected void handleAuthRequest( ChannelHandlerContext ctx )
    {
        log.debug( "Auth requested, sending [auth {}]", "*****" );
        EslMessage response = sendSyncSingleLineCommand( ctx.getChannel(), "auth " + password );
        log.debug( "Auth response [{}]", response );
        if ( response.getContentType().equals( Value.COMMAND_REPLY ) )
        {
            CommandResponse commandResponse = new CommandResponse( "auth " + password, response );
            listener.authResponseReceived( commandResponse );
        }
        else
        {
            log.error( "Bad auth response message [{}]", response );
            throw new IllegalStateException( "Incorrect auth response" );
        }
    }

    @Override
    protected void handleDisconnectionNotice()
    {
        log.debug( "Received disconnection notice" );
        listener.disconnected();
    }
   
}
TOP

Related Classes of org.freeswitch.esl.client.inbound.InboundClientHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.