/*
* 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.transport;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author david varnes
*/
public class SendMsg
{
private final List<String> msgLines = new ArrayList<String>();
private final boolean hasUuid;
/**
* Constructor for use with outbound socket client only. This client mode does not need a call
* UUID for context.
*/
public SendMsg()
{
msgLines.add( "sendmsg" );
hasUuid = false;
}
/**
* Constructor for use with the inbound client.
*
* @param uuid of the call to send message to (it should be in 'park' to be operated on).
*/
public SendMsg( String uuid )
{
msgLines.add( "sendmsg " + uuid );
hasUuid = true;
}
/**
* Adds the following line to the message:
* <pre>
* call-command: command
* </pre>
* @param command the string command [ execute | hangup ]
*/
public void addCallCommand( String command )
{
msgLines.add( "call-command: " + command );
}
/**
* Adds the following line to the message:
* <pre>
* execute-app-name: appName
* </pre>
* @param appName the string app name to execute
*/
public void addExecuteAppName( String appName )
{
msgLines.add( "execute-app-name: " + appName );
}
/**
* Adds the following line to the message:
* <pre>
* execute-app-arg: arg
* </pre>
* @param arg the string arg
*/
public void addExecuteAppArg( String arg )
{
msgLines.add( "execute-app-arg: " + arg );
}
/**
* Adds the following line to the message:
* <pre>
* loops: count
* </pre>
* @param count the int number of times to loop
*/
public void addLoops( int count )
{
msgLines.add( "loops: " + count );
}
/**
* Adds the following line to the message:
* <pre>
* hangup-cause: cause
* </pre>
* @param cause the string cause
*/
public void addHangupCause( String cause )
{
msgLines.add( "hangup-cause: " + cause );
}
/**
* Adds the following line to the message:
* <pre>
* nomedia-uid: value
* </pre>
* @param value the string value part of the line
*/
public void addNomediaUuid( String value )
{
msgLines.add( "nomedia-uuid: " + value );
}
/**
* Adds the following line to the message:
* <pre>
* event-lock: true
* </pre>
*/
public void addEventLock()
{
msgLines.add( "event-lock: true" );
}
/**
* A generic method to add a message line. The constructed line in the sent message will be in the
* form:
* <pre>
* name: value
* </pre>
*
* @param name part of line
* @param value part of line
*/
public void addGenericLine( String name, String value )
{
msgLines.add( name + ": " + value );
}
/**
* The list of strings that make up the message to send to FreeSWITCH.
*
* @return list of strings, as they were added to this message.
*/
public List<String> getMsgLines()
{
return msgLines;
}
/**
* Indicate if message was constructed with a UUID.
*
* @return true if constructed with a UUID.
*/
public boolean hasUuid()
{
return hasUuid;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder( "SendMsg: " );
if ( msgLines.size() > 1 )
{
sb.append( msgLines.get( 1 ) );
}
else if ( msgLines.size() > 0 )
{
sb.append( 0 );
}
return sb.toString();
}
}