Large code cleanup, see change log
This commit is contained in:
		
							parent
							
								
									19d1fdf418
								
							
						
					
					
						commit
						ba42c2f06f
					
				
					 141 changed files with 7393 additions and 8578 deletions
				
			
		Asterisk.2013/Asterisk.NET
Common.cs
FastAGI
AGIChannel.csAGIConnectionHandler.csAGIReader.csAGIReply.csAGIRequest.csAGIWriter.csAsteriskFastAGI.csMappingStrategy.cs
Helper.csIParseSupport.csLogger.csManager
Action
AGIAction.csAOCMessageAction.csAbsoluteTimeoutAction.csAgentCallbackLoginAction.csAgentLogoffAction.csAgentsAction.csAtxferAction.csBridgeAction.csChallengeAction.csChangeMonitorAction.csCommandAction.csConfbridgeKickAction.csConfbridgeListAction.csConfbridgeListRoomsAction.csConfbridgeLockAction.csConfbridgeMuteAction.csConfbridgeSetSingleVideoSrcAction.csConfbridgeStartRecordAction.csConfbridgeStopRecordAction.csConfbridgeUnlockAction.csConfbridgeUnmuteAction.csCoreSettingsAction.csCoreShowChannelsAction.csCoreStatusAction.csCreateConfigAction.csDBDelAction.csDBDelTreeAction.csDBGetAction.csDBPutAction.csEventsAction.csExtensionStateAction.csGetConfigAction.csGetVarAction.csHangupAction.csListCommandsAction.csLoginAction.csLogoffAction.csMailboxCountAction.csMailboxStatusAction.csManagerAction.csManagerActionResponse.csMonitorAction.csOriginateAction.csParkAction.csParkedCallsAction.csPingAction.csProxyAction.csQueueAddAction.csQueueLogAction.csQueuePauseAction.csQueuePenaltyAction.csQueueReloadAction.csQueueRemoveAction.csQueueResetAction.csQueueRuleAction.csQueueStatusAction.csRedirectAction.csSIPPeersAction.csSIPShowPeerAction.csSetCDRUserFieldAction.csSetVarAction.csStatusAction.csStopMonitorAction.csUpdateConfigAction.csZapDNDOffAction.csZapDNDOnAction.csZapDialOffhookAction.csZapHangupAction.csZapShowChannelsAction.csZapTransferAction.cs
AsteriskVersion.csEvent
AGIExecEvent.csAbstractAgentEvent.csAbstractMeetmeEvent.csAbstractParkedCallEvent.csAbstractQueueMemberEvent.csAgentCallbackLoginEvent.csAgentCallbackLogoffEvent.csAgentCalledEvent.csAgentCompleteEvent.csAgentConnectEvent.csAgentLoginEvent.csAgentLogoffEvent.csAgentsEvent.csAlarmEvent.csAsyncAGIEvent.csCdrEvent.csChannelReloadEvent.cs
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -10,18 +10,24 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
        /// <summary> The hostname to use if none is provided.</summary>
 | 
			
		||||
        public const string DEFAULT_HOSTNAME = "localhost";
 | 
			
		||||
 | 
			
		||||
        /// <summary> The port to use if none is provided.</summary>
 | 
			
		||||
        public const int DEFAULT_PORT = 5038;
 | 
			
		||||
 | 
			
		||||
        /// <summary>Line separator</summary>
 | 
			
		||||
        public const string LINE_SEPARATOR = "\r\n";
 | 
			
		||||
 | 
			
		||||
		public static Regex ASTERISK_VERSION = new Regex("^Asterisk\\s+([0-9]+.[0-9]+.[0-9]+).*", RegexOptions.Compiled | RegexOptions.IgnoreCase);
 | 
			
		||||
        public static Regex ASTERISK_VERSION = new Regex("^Asterisk\\s+([0-9]+.[0-9]+.[0-9]+).*",
 | 
			
		||||
            RegexOptions.Compiled | RegexOptions.IgnoreCase);
 | 
			
		||||
 | 
			
		||||
        public static Regex SHOW_VERSION_FILES_PATTERN = new Regex("^([\\S]+)\\s+Revision: ([0-9\\.]+)");
 | 
			
		||||
		public static char[] RESPONSE_KEY_VALUE_SEPARATOR = new char[] { ':' };
 | 
			
		||||
		public static char[] MINUS_SEPARATOR = new char[] { '-' };
 | 
			
		||||
        public static char[] RESPONSE_KEY_VALUE_SEPARATOR = {':'};
 | 
			
		||||
        public static char[] MINUS_SEPARATOR = {'-'};
 | 
			
		||||
        public static char INTERNAL_ACTION_ID_DELIMITER = '#';
 | 
			
		||||
 | 
			
		||||
        /// <summary> Variables delimiter </summary>
 | 
			
		||||
		public static char[] VAR_DELIMITER = new char[] { '|' };
 | 
			
		||||
        public static char[] VAR_DELIMITER = {'|'};
 | 
			
		||||
 | 
			
		||||
        public static IFormatProvider CultureInfoEn = new CultureInfo("en-US", false);
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
| 
						 | 
				
			
			@ -30,8 +36,10 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
        /// <summary> The default AGI bind port. </summary>
 | 
			
		||||
        public const int AGI_BIND_PORT = 4573;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The default AGI thread pool size. </summary>
 | 
			
		||||
        public const int AGI_POOL_SIZE = 10;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The default AGI bind address. </summary>
 | 
			
		||||
        public const string AGI_BIND_ADDRESS = "0.0.0.0";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +52,10 @@ namespace AsterNET
 | 
			
		|||
        public static Regex AGI_STATUS_PATTERN = new Regex("^(\\d{3})[ -]", RegexOptions.Compiled);
 | 
			
		||||
        public static Regex AGI_RESULT_PATTERN = new Regex("^200 result= *(\\S+)", RegexOptions.Compiled);
 | 
			
		||||
        public static Regex AGI_PARENTHESIS_PATTERN = new Regex("^200 result=\\S* +\\((.*)\\)", RegexOptions.Compiled);
 | 
			
		||||
		public static Regex AGI_ADDITIONAL_ATTRIBUTES_PATTERN = new Regex("^200 result=\\S* +(\\(.*\\) )?(.+)$", RegexOptions.Compiled);
 | 
			
		||||
 | 
			
		||||
        public static Regex AGI_ADDITIONAL_ATTRIBUTES_PATTERN = new Regex("^200 result=\\S* +(\\(.*\\) )?(.+)$",
 | 
			
		||||
            RegexOptions.Compiled);
 | 
			
		||||
 | 
			
		||||
        public static Regex AGI_ADDITIONAL_ATTRIBUTE_PATTERN = new Regex("(\\S+)=(\\S+)", RegexOptions.Compiled);
 | 
			
		||||
        public static Regex AGI_SYNOPSIS_PATTERN = new Regex("^\\s*Usage:\\s*(.*)\\s*$", RegexOptions.Compiled);
 | 
			
		||||
        public static Regex AGI_SCRIPT_PATTERN = new Regex("^([^\\?]*)\\?(.*)$");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,6 @@
 | 
			
		|||
using AsterNET.FastAGI.Command;
 | 
			
		||||
using AsterNET.IO;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -5,30 +8,30 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AGIChannel
 | 
			
		||||
    {
 | 
			
		||||
        private AGIWriter agiWriter;
 | 
			
		||||
		private AGIReader agiReader;
 | 
			
		||||
        private readonly bool _SC511_CAUSES_EXCEPTION;
 | 
			
		||||
        private readonly bool _SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
        private readonly AGIReader agiReader;
 | 
			
		||||
        private readonly AGIWriter agiWriter;
 | 
			
		||||
        private AGIReply agiReply;
 | 
			
		||||
 | 
			
		||||
        private bool _SC511_CAUSES_EXCEPTION = false;
 | 
			
		||||
        private bool _SCHANGUP_CAUSES_EXCEPTION = false;
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        public AGIChannel(IO.SocketConnection socket, bool SC511_CAUSES_EXCEPTION, bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        public AGIChannel(SocketConnection socket, bool SC511_CAUSES_EXCEPTION, bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        {
 | 
			
		||||
            this.agiWriter = new AGIWriter(socket);
 | 
			
		||||
            this.agiReader = new AGIReader(socket);
 | 
			
		||||
            agiWriter = new AGIWriter(socket);
 | 
			
		||||
            agiReader = new AGIReader(socket);
 | 
			
		||||
 | 
			
		||||
            this._SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            this._SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
            _SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            _SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AGIChannel(AGIWriter agiWriter, AGIReader agiReader, bool SC511_CAUSES_EXCEPTION, bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        public AGIChannel(AGIWriter agiWriter, AGIReader agiReader, bool SC511_CAUSES_EXCEPTION,
 | 
			
		||||
            bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        {
 | 
			
		||||
            this.agiWriter = agiWriter;
 | 
			
		||||
            this.agiReader = agiReader;
 | 
			
		||||
 | 
			
		||||
            this._SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            this._SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
            _SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            _SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -39,18 +42,18 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            get { return agiReply; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public AGIReply SendCommand(Command.AGICommand command)
 | 
			
		||||
        public AGIReply SendCommand(AGICommand command)
 | 
			
		||||
        {
 | 
			
		||||
            agiWriter.SendCommand(command);
 | 
			
		||||
            agiReply = agiReader.ReadReply();
 | 
			
		||||
            int status = agiReply.GetStatus();
 | 
			
		||||
            if (status == (int) AGIReplyStatuses.SC_INVALID_OR_UNKNOWN_COMMAND)
 | 
			
		||||
                throw new InvalidOrUnknownCommandException(command.BuildCommand());
 | 
			
		||||
			else if (status == (int)AGIReplyStatuses.SC_INVALID_COMMAND_SYNTAX)
 | 
			
		||||
            if (status == (int) AGIReplyStatuses.SC_INVALID_COMMAND_SYNTAX)
 | 
			
		||||
                throw new InvalidCommandSyntaxException(agiReply.GetSynopsis(), agiReply.GetUsage());
 | 
			
		||||
            else if (status == (int)AGIReplyStatuses.SC_DEAD_CHANNEL && _SC511_CAUSES_EXCEPTION)
 | 
			
		||||
            if (status == (int) AGIReplyStatuses.SC_DEAD_CHANNEL && _SC511_CAUSES_EXCEPTION)
 | 
			
		||||
                throw new AGIHangupException();
 | 
			
		||||
            else if ((status == 0) && agiReply.FirstLine == "HANGUP" && _SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
            if ((status == 0) && agiReply.FirstLine == "HANGUP" && _SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
                throw new AGIHangupException();
 | 
			
		||||
            return agiReply;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using AsterNET.FastAGI.Command;
 | 
			
		||||
using AsterNET.IO;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -13,53 +15,55 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    public class AGIConnectionHandler
 | 
			
		||||
    {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
		private Logger logger = Logger.Instance();
 | 
			
		||||
        private readonly Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
		private static readonly LocalDataStoreSlot channel = Thread.AllocateDataSlot();
 | 
			
		||||
		private IO.SocketConnection socket;
 | 
			
		||||
		private IMappingStrategy mappingStrategy;
 | 
			
		||||
        private bool _SC511_CAUSES_EXCEPTION = false;
 | 
			
		||||
        private bool _SCHANGUP_CAUSES_EXCEPTION = false;
 | 
			
		||||
        private static readonly LocalDataStoreSlot _channel = Thread.AllocateDataSlot();
 | 
			
		||||
        private readonly SocketConnection socket;
 | 
			
		||||
        private readonly IMappingStrategy mappingStrategy;
 | 
			
		||||
        private readonly bool _SC511_CAUSES_EXCEPTION;
 | 
			
		||||
        private readonly bool _SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
 | 
			
		||||
        #region Channel
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the AGIChannel associated with the current thread.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the AGIChannel associated with the current thread or <code>null</code> if none is associated.</returns>
 | 
			
		||||
        internal static AGIChannel Channel
 | 
			
		||||
        {
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return (AGIChannel) Thread.GetData(AGIConnectionHandler.channel);
 | 
			
		||||
			}
 | 
			
		||||
            get { return (AGIChannel) Thread.GetData(_channel); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region AGIConnectionHandler(socket, mappingStrategy)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AGIConnectionHandler to handle the given socket connection.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="socket">the socket connection to handle.</param>
 | 
			
		||||
        /// <param name="mappingStrategy">the strategy to use to determine which script to run.</param>
 | 
			
		||||
        public AGIConnectionHandler(IO.SocketConnection socket, IMappingStrategy mappingStrategy, bool SC511_CAUSES_EXCEPTION, bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        public AGIConnectionHandler(SocketConnection socket, IMappingStrategy mappingStrategy,
 | 
			
		||||
            bool SC511_CAUSES_EXCEPTION, bool SCHANGUP_CAUSES_EXCEPTION)
 | 
			
		||||
        {
 | 
			
		||||
            this.socket = socket;
 | 
			
		||||
            this.mappingStrategy = mappingStrategy;
 | 
			
		||||
            this._SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            this._SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
            _SC511_CAUSES_EXCEPTION = SC511_CAUSES_EXCEPTION;
 | 
			
		||||
            _SCHANGUP_CAUSES_EXCEPTION = SCHANGUP_CAUSES_EXCEPTION;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public void Run()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
				AGIReader reader = new AGIReader(socket);
 | 
			
		||||
				AGIWriter writer = new AGIWriter(socket);
 | 
			
		||||
                var reader = new AGIReader(socket);
 | 
			
		||||
                var writer = new AGIWriter(socket);
 | 
			
		||||
                AGIRequest request = reader.ReadRequest();
 | 
			
		||||
				AGIChannel channel = new AGIChannel(writer, reader, this._SC511_CAUSES_EXCEPTION, this._SCHANGUP_CAUSES_EXCEPTION);
 | 
			
		||||
                var channel = new AGIChannel(writer, reader, _SC511_CAUSES_EXCEPTION, _SCHANGUP_CAUSES_EXCEPTION);
 | 
			
		||||
                AGIScript script = mappingStrategy.DetermineScript(request);
 | 
			
		||||
				Thread.SetData(AGIConnectionHandler.channel, channel);
 | 
			
		||||
                Thread.SetData(_channel, channel);
 | 
			
		||||
 | 
			
		||||
                if (script != null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -73,9 +77,9 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
					string error;
 | 
			
		||||
					error = "No script configured for URL '" + request.RequestURL + "' (script '" + request.Script + "')";
 | 
			
		||||
					channel.SendCommand(new Command.VerboseCommand(error, 1));
 | 
			
		||||
                    var error = "No script configured for URL '" + request.RequestURL + "' (script '" + request.Script +
 | 
			
		||||
                                "')";
 | 
			
		||||
                    channel.SendCommand(new VerboseCommand(error, 1));
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                    logger.Error(error);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +108,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
#endif
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			Thread.SetData(AGIConnectionHandler.channel, null);
 | 
			
		||||
            Thread.SetData(_channel, null);
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                socket.Close();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,30 +1,30 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using AsterNET.IO;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
    public class AGIReader
 | 
			
		||||
    {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
		private Logger logger = Logger.Instance();
 | 
			
		||||
        private readonly Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
		private IO.SocketConnection socket;
 | 
			
		||||
		public AGIReader(IO.SocketConnection socket)
 | 
			
		||||
        private readonly SocketConnection socket;
 | 
			
		||||
 | 
			
		||||
        public AGIReader(SocketConnection socket)
 | 
			
		||||
        {
 | 
			
		||||
            this.socket = socket;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AGIRequest ReadRequest()
 | 
			
		||||
        {
 | 
			
		||||
			string line;
 | 
			
		||||
			List<string> lines = new List<string>();
 | 
			
		||||
            var lines = new List<string>();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                logger.Info("AGIReader.ReadRequest():");
 | 
			
		||||
#endif
 | 
			
		||||
                string line;
 | 
			
		||||
                while ((line = socket.ReadLine()) != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (line.Length == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -40,12 +40,13 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                throw new AGINetworkException("Unable to read request from Asterisk: " + ex.Message, ex);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
			AGIRequest request = new AGIRequest(lines);
 | 
			
		||||
 | 
			
		||||
			request.LocalAddress = socket.LocalAddress;
 | 
			
		||||
			request.LocalPort = socket.LocalPort;
 | 
			
		||||
			request.RemoteAddress = socket.RemoteAddress;
 | 
			
		||||
			request.RemotePort = socket.RemotePort;
 | 
			
		||||
            var request = new AGIRequest(lines)
 | 
			
		||||
            {
 | 
			
		||||
                LocalAddress = socket.LocalAddress,
 | 
			
		||||
                LocalPort = socket.LocalPort,
 | 
			
		||||
                RemoteAddress = socket.RemoteAddress,
 | 
			
		||||
                RemotePort = socket.RemotePort
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            return request;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -53,9 +54,9 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        public AGIReply ReadReply()
 | 
			
		||||
        {
 | 
			
		||||
            string line;
 | 
			
		||||
			string badSyntax = ((int)AGIReplyStatuses.SC_INVALID_COMMAND_SYNTAX).ToString();
 | 
			
		||||
            var badSyntax = ((int) AGIReplyStatuses.SC_INVALID_COMMAND_SYNTAX).ToString();
 | 
			
		||||
 | 
			
		||||
			List<string> lines = new List<string>();
 | 
			
		||||
            var lines = new List<string>();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                line = socket.ReadLine();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,28 +1,33 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    #region Enum - AGIReplyStatuses 
 | 
			
		||||
 | 
			
		||||
    public enum AGIReplyStatuses
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Status code (200) indicating Asterisk successfully processed the AGICommand.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        SC_SUCCESS = 200,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Status code (510) indicating Asterisk was unable to process the
 | 
			
		||||
        ///     AGICommand because there is no command with the given name available.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        SC_INVALID_OR_UNKNOWN_COMMAND = 510,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Status code (511) indicating Asterisk was unable to process the
 | 
			
		||||
        ///     AGICommand because the channel is dead.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        SC_DEAD_CHANNEL = 511,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Status code (520) indicating Asterisk was unable to process the
 | 
			
		||||
        ///     AGICommand because the syntax used was not correct. This is most likely
 | 
			
		||||
| 
						 | 
				
			
			@ -33,6 +38,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        SC_INVALID_COMMAND_SYNTAX = 520
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -41,35 +47,51 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    public class AGIReply
 | 
			
		||||
    {
 | 
			
		||||
        #region Variables
 | 
			
		||||
		private Match matcher;
 | 
			
		||||
		private List<string> lines;
 | 
			
		||||
		private string firstLine;
 | 
			
		||||
		/// <summary> The result, that is the part directly following the "result=" string.</summary>
 | 
			
		||||
		private string result;
 | 
			
		||||
		/// <summary> The status code.</summary>
 | 
			
		||||
		private int status;
 | 
			
		||||
 | 
			
		||||
        private readonly string firstLine;
 | 
			
		||||
        private readonly List<string> lines;
 | 
			
		||||
 | 
			
		||||
        /// <summary>Additional attributes contained in this reply, for example endpos.</summary>
 | 
			
		||||
        private Dictionary<string, string> attributes;
 | 
			
		||||
 | 
			
		||||
        private bool attributesCreated;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The contents of the parenthesis.</summary>
 | 
			
		||||
        private string extra;
 | 
			
		||||
 | 
			
		||||
        private bool extraCreated;
 | 
			
		||||
        private Match matcher;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The result, that is the part directly following the "result=" string.</summary>
 | 
			
		||||
        private string result;
 | 
			
		||||
 | 
			
		||||
        private bool resultCreated;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The status code.</summary>
 | 
			
		||||
        private int status;
 | 
			
		||||
 | 
			
		||||
        private bool statusCreated;
 | 
			
		||||
 | 
			
		||||
        /// <summary> In case of status == 520 (invalid command syntax) this attribute contains the synopsis of the command.</summary>
 | 
			
		||||
        private string synopsis;
 | 
			
		||||
 | 
			
		||||
        private bool synopsisCreated;
 | 
			
		||||
 | 
			
		||||
        /// <summary> In case of status == 520 (invalid command syntax) this attribute contains the usage of the command.</summary>
 | 
			
		||||
        private string usage;
 | 
			
		||||
		private bool extraCreated;
 | 
			
		||||
		private bool synopsisCreated;
 | 
			
		||||
		private bool attributesCreated;
 | 
			
		||||
		private bool resultCreated;
 | 
			
		||||
		private bool statusCreated;
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AGIReply()
 | 
			
		||||
 | 
			
		||||
        public AGIReply()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AGIReply(lines)
 | 
			
		||||
 | 
			
		||||
        public AGIReply(List<string> lines)
 | 
			
		||||
        {
 | 
			
		||||
            this.lines = lines;
 | 
			
		||||
| 
						 | 
				
			
			@ -77,25 +99,33 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            {
 | 
			
		||||
                firstLine = lines[0];
 | 
			
		||||
            }
 | 
			
		||||
			catch { }
 | 
			
		||||
            catch
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region FirstLine
 | 
			
		||||
 | 
			
		||||
        public string FirstLine
 | 
			
		||||
        {
 | 
			
		||||
            get { return firstLine; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Lines
 | 
			
		||||
 | 
			
		||||
        public IList Lines
 | 
			
		||||
        {
 | 
			
		||||
            get { return lines; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ResultCode
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the return code (the result as int).
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -118,9 +148,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ResultCodeAsChar
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the return code as character.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -129,16 +161,17 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				int resultCode;
 | 
			
		||||
				resultCode = ResultCode;
 | 
			
		||||
                int resultCode = ResultCode;
 | 
			
		||||
                if (resultCode < 0)
 | 
			
		||||
                    return (char) (0x0);
 | 
			
		||||
                return (char) resultCode;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Extra
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the text in parenthesis contained in this reply.<br />
 | 
			
		||||
        ///     The meaning of this property depends on the command sent. Sometimes it
 | 
			
		||||
| 
						 | 
				
			
			@ -164,9 +197,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                return extra;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetResult()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the result, that is the part directly following the "result=" string.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -183,9 +218,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            resultCreated = true;
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetStatus()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the status code.<br />
 | 
			
		||||
        ///     Supported status codes are:<br />
 | 
			
		||||
| 
						 | 
				
			
			@ -204,9 +241,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            statusCreated = true;
 | 
			
		||||
            return status;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetAttribute(name)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns an additional attribute contained in the reply.<br />
 | 
			
		||||
        ///     For example the reply to the StreamFileCommand contains an additional
 | 
			
		||||
| 
						 | 
				
			
			@ -250,11 +289,13 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            if (attributes == null || (attributes.Count == 0))
 | 
			
		||||
                return null;
 | 
			
		||||
 | 
			
		||||
			return (string)attributes[name.ToLower(Helper.CultureInfo)];
 | 
			
		||||
            return attributes[name.ToLower(Helper.CultureInfo)];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetSynopsis()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the synopsis of the command sent if Asterisk expected a different
 | 
			
		||||
        ///     syntax (getStatus() == SC_INVALID_COMMAND_SYNTAX).
 | 
			
		||||
| 
						 | 
				
			
			@ -272,18 +313,18 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    string secondLine;
 | 
			
		||||
                    Match synopsisMatcher;
 | 
			
		||||
 | 
			
		||||
					secondLine = ((string)lines[1]);
 | 
			
		||||
                    secondLine = lines[1];
 | 
			
		||||
                    synopsisMatcher = Common.AGI_SYNOPSIS_PATTERN.Match(secondLine);
 | 
			
		||||
                    if (synopsisMatcher.Success)
 | 
			
		||||
                        synopsis = synopsisMatcher.Groups[1].Value;
 | 
			
		||||
                }
 | 
			
		||||
                synopsisCreated = true;
 | 
			
		||||
 | 
			
		||||
				StringBuilder sbUsage = new StringBuilder();
 | 
			
		||||
                var sbUsage = new StringBuilder();
 | 
			
		||||
                string line;
 | 
			
		||||
                for (int i = 2; i < lines.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
					line = ((string)lines[i]);
 | 
			
		||||
                    line = lines[i];
 | 
			
		||||
                    if (line == Common.AGI_END_OF_PROPER_USAGE)
 | 
			
		||||
                        break;
 | 
			
		||||
                    sbUsage.Append(line.Trim());
 | 
			
		||||
| 
						 | 
				
			
			@ -293,9 +334,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            }
 | 
			
		||||
            return synopsis;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetUsage()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the usage of the command sent if Asterisk expected a different
 | 
			
		||||
        ///     syntax (getStatus() == SC_INVALID_COMMAND_SYNTAX).
 | 
			
		||||
| 
						 | 
				
			
			@ -308,13 +351,16 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        {
 | 
			
		||||
            return usage;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ToString()
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return Helper.ToString(this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +1,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Web;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Web;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -15,11 +13,12 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    public class AGIRequest
 | 
			
		||||
    {
 | 
			
		||||
        #region Variables
 | 
			
		||||
 | 
			
		||||
#if LOGGER
 | 
			
		||||
        private Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
        private string rawCallerId;
 | 
			
		||||
		private Dictionary<string, string> request;
 | 
			
		||||
        private readonly Dictionary<string, string> request;
 | 
			
		||||
 | 
			
		||||
        /// <summary> A map assigning the values of a parameter (an array of Strings) to the name of the parameter.</summary>
 | 
			
		||||
        private Dictionary<string, List<string>> parameterMap;
 | 
			
		||||
| 
						 | 
				
			
			@ -27,13 +26,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        private string parameters;
 | 
			
		||||
        private string script;
 | 
			
		||||
        private bool callerIdCreated;
 | 
			
		||||
		private IPAddress localAddress;
 | 
			
		||||
		private int localPort;
 | 
			
		||||
		private IPAddress remoteAddress;
 | 
			
		||||
		private int remotePort;
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AGIRequest(ICollection environment)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AGIRequest.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,93 +41,108 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                throw new ArgumentException("Environment must not be null.");
 | 
			
		||||
            request = buildMap(environment);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Request
 | 
			
		||||
 | 
			
		||||
        public IDictionary Request
 | 
			
		||||
        {
 | 
			
		||||
            get { return request; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RequestURL 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the full URL of the request in the form agi://host[:port][/script].
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string RequestURL
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["request"]; }
 | 
			
		||||
            get { return request["request"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of the channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the name of the channel.</returns>
 | 
			
		||||
        public string Channel
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["channel"]; }
 | 
			
		||||
            get { return request["channel"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region UniqueId 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the unqiue id of the channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the unqiue id of the channel.</returns>
 | 
			
		||||
        public string UniqueId
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["uniqueid"]; }
 | 
			
		||||
            get { return request["uniqueid"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Type 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the type of the channel, for example "SIP".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the type of the channel, for example "SIP".</returns>
 | 
			
		||||
        public string Type
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["type"]; }
 | 
			
		||||
            get { return request["type"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Language 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the language, for example "en".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Language
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["language"]; }
 | 
			
		||||
            get { return request["language"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallerId 
 | 
			
		||||
 | 
			
		||||
        public string CallerId
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				string callerIdName = (string)(request["calleridname"]);
 | 
			
		||||
				string callerId = (string)(request["callerid"]);
 | 
			
		||||
                string callerIdName = request["calleridname"];
 | 
			
		||||
                string callerId = request["callerid"];
 | 
			
		||||
                if (callerIdName != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (callerId == null || callerId.ToLower(Helper.CultureInfo) == "unknown")
 | 
			
		||||
                        return null;
 | 
			
		||||
                    return callerId;
 | 
			
		||||
                }
 | 
			
		||||
				else // Asterisk 1.0
 | 
			
		||||
                return callerId10();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallerIdName 
 | 
			
		||||
 | 
			
		||||
        public string CallerIdName
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				string callerIdName = (string)(request["calleridname"]);
 | 
			
		||||
                string callerIdName = request["calleridname"];
 | 
			
		||||
                if (callerIdName != null)
 | 
			
		||||
                {
 | 
			
		||||
                    // Asterisk 1.2
 | 
			
		||||
| 
						 | 
				
			
			@ -138,13 +150,14 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                        return null;
 | 
			
		||||
                    return callerIdName;
 | 
			
		||||
                }
 | 
			
		||||
				else // Asterisk 1.0
 | 
			
		||||
                return callerIdName10();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Asterisk 1.0 CallerID and CallerIdName 
 | 
			
		||||
 | 
			
		||||
        private string callerId10()
 | 
			
		||||
        {
 | 
			
		||||
            int lbPosition;
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +165,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
 | 
			
		||||
            if (!callerIdCreated)
 | 
			
		||||
            {
 | 
			
		||||
				rawCallerId = ((string) request["callerid"]);
 | 
			
		||||
                rawCallerId = request["callerid"];
 | 
			
		||||
                callerIdCreated = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +192,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
 | 
			
		||||
            if (!callerIdCreated)
 | 
			
		||||
            {
 | 
			
		||||
				rawCallerId = ((string) request["callerid"]);
 | 
			
		||||
                rawCallerId = request["callerid"];
 | 
			
		||||
                callerIdCreated = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -197,58 +210,67 @@ namespace AsterNET.FastAGI
 | 
			
		|||
 | 
			
		||||
            if (callerIdName.Length == 0)
 | 
			
		||||
                return null;
 | 
			
		||||
			else
 | 
			
		||||
            return callerIdName;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Dnid 
 | 
			
		||||
 | 
			
		||||
        public string Dnid
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				string dnid = (string)(request["dnid"]);
 | 
			
		||||
                string dnid = request["dnid"];
 | 
			
		||||
                if (dnid == null || dnid.ToLower(Helper.CultureInfo) == "unknown")
 | 
			
		||||
                    return null;
 | 
			
		||||
                return dnid;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Rdnis 
 | 
			
		||||
 | 
			
		||||
        public string Rdnis
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				string rdnis = (string)(request["rdnis"]);
 | 
			
		||||
                string rdnis = request["rdnis"];
 | 
			
		||||
                if (rdnis == null || rdnis.ToLower(Helper.CultureInfo) == "unknown")
 | 
			
		||||
                    return null;
 | 
			
		||||
                return rdnis;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Context
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the context in the dial plan from which the AGI script was called.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Context
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["context"]; }
 | 
			
		||||
            get { return request["context"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Extension
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the extension in the dial plan from which the AGI script was called.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Extension
 | 
			
		||||
        {
 | 
			
		||||
			get { return (string) request["extension"]; }
 | 
			
		||||
            get { return request["extension"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Priority
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the priority in the dial plan from which the AGI script was called.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -258,15 +280,16 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            {
 | 
			
		||||
                if (request["priority"] != null)
 | 
			
		||||
                {
 | 
			
		||||
					return (string) request["priority"];
 | 
			
		||||
                    return request["priority"];
 | 
			
		||||
                }
 | 
			
		||||
                return "";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Enhanced 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns wheather this agi is passed audio (EAGI - Enhanced AGI).<br />
 | 
			
		||||
        ///     Enhanced AGI is currently not supported on FastAGI.<br />
 | 
			
		||||
| 
						 | 
				
			
			@ -276,60 +299,52 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
				if (request["enhanced"] != null && (string)request["enhanced"] == "1.0")
 | 
			
		||||
                if (request["enhanced"] != null && request["enhanced"] == "1.0")
 | 
			
		||||
                    return true;
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region AccountCode 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the account code set for the call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string AccountCode
 | 
			
		||||
        {
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return (string) request["accountCode"];
 | 
			
		||||
            get { return request["accountCode"]; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region LocalAddress
 | 
			
		||||
		public IPAddress LocalAddress
 | 
			
		||||
		{
 | 
			
		||||
			get { return localAddress; }
 | 
			
		||||
			set { this.localAddress = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public IPAddress LocalAddress { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region LocalPort
 | 
			
		||||
		public int LocalPort
 | 
			
		||||
		{
 | 
			
		||||
			get { return localPort; }
 | 
			
		||||
			set { this.localPort = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public int LocalPort { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RemoteAddress
 | 
			
		||||
		public IPAddress RemoteAddress
 | 
			
		||||
		{
 | 
			
		||||
			get { return remoteAddress; }
 | 
			
		||||
			set { this.remoteAddress = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public IPAddress RemoteAddress { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RemotePort
 | 
			
		||||
		public int RemotePort
 | 
			
		||||
		{
 | 
			
		||||
			get { return remotePort; }
 | 
			
		||||
			set { this.remotePort = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public int RemotePort { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Script()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of the script to execute.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -340,7 +355,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                if (script != null)
 | 
			
		||||
                    return script;
 | 
			
		||||
 | 
			
		||||
				script = ((string)request["network_script"]);
 | 
			
		||||
                script = request["network_script"];
 | 
			
		||||
                if (script != null)
 | 
			
		||||
                {
 | 
			
		||||
                    Match scriptMatcher = Common.AGI_SCRIPT_PATTERN.Match(script);
 | 
			
		||||
| 
						 | 
				
			
			@ -353,9 +368,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                return script;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallingAni2
 | 
			
		||||
 | 
			
		||||
        public int CallingAni2
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
| 
						 | 
				
			
			@ -364,15 +381,19 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    return -1;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
					return Int32.Parse((string)(request["callingani2"]));
 | 
			
		||||
                    return Int32.Parse(request["callingani2"]);
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
				catch {}
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallingPres 
 | 
			
		||||
 | 
			
		||||
        public int CallingPres
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
| 
						 | 
				
			
			@ -381,15 +402,19 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    return -1;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
					return Int32.Parse((string)(request["callingpres"]));
 | 
			
		||||
                    return Int32.Parse(request["callingpres"]);
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
				catch {}
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallingTns 
 | 
			
		||||
 | 
			
		||||
        public int CallingTns
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
| 
						 | 
				
			
			@ -398,15 +423,19 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    return -1;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
					return Int32.Parse((string)(request["callingtns"]));
 | 
			
		||||
                    return Int32.Parse(request["callingtns"]);
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
				catch {}
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallingTon 
 | 
			
		||||
 | 
			
		||||
        public int CallingTon
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
| 
						 | 
				
			
			@ -415,15 +444,19 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    return -1;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
					return Int32.Parse((String)(request["callington"]));
 | 
			
		||||
                    return Int32.Parse(request["callington"]);
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
				catch {}
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Parameter(string name) 
 | 
			
		||||
 | 
			
		||||
        public string Parameter(string name)
 | 
			
		||||
        {
 | 
			
		||||
            List<string> values;
 | 
			
		||||
| 
						 | 
				
			
			@ -432,9 +465,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                return null;
 | 
			
		||||
            return values[0];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ParameterValues(string name) 
 | 
			
		||||
 | 
			
		||||
        public List<string> ParameterValues(string name)
 | 
			
		||||
        {
 | 
			
		||||
            if (ParameterMap().Count == 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -442,25 +477,31 @@ namespace AsterNET.FastAGI
 | 
			
		|||
 | 
			
		||||
            return parameterMap[name];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ParameterMap() 
 | 
			
		||||
 | 
			
		||||
        public Dictionary<string, List<string>> ParameterMap()
 | 
			
		||||
        {
 | 
			
		||||
            if (parameterMap == null)
 | 
			
		||||
				parameterMap = parseParameters(this.parameters);
 | 
			
		||||
                parameterMap = parseParameters(parameters);
 | 
			
		||||
            return parameterMap;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ToString() 
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return Helper.ToString(this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region buildMap(ICollection lines) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Builds a map containing variable names as key (with the "agi_" prefix stripped) and the corresponding values.<br />
 | 
			
		||||
        ///     Syntactically invalid and empty variables are skipped.
 | 
			
		||||
| 
						 | 
				
			
			@ -473,8 +514,8 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            string key;
 | 
			
		||||
            string value;
 | 
			
		||||
 | 
			
		||||
			Dictionary<string, string> map = new Dictionary<string,string>(lines.Count);
 | 
			
		||||
			foreach (string line in lines)
 | 
			
		||||
            var map = new Dictionary<string, string>(lines.Count);
 | 
			
		||||
            foreach (var line in lines)
 | 
			
		||||
            {
 | 
			
		||||
                colonPosition = line.IndexOf(':');
 | 
			
		||||
                if (colonPosition < 0 || !line.StartsWith("agi_") || line.Length < colonPosition + 2)
 | 
			
		||||
| 
						 | 
				
			
			@ -487,9 +528,11 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            }
 | 
			
		||||
            return map;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region parseParameters(string s)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Parses the given parameter string and caches the result.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -497,7 +540,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        /// <returns> a Map made up of parameter names their values</returns>
 | 
			
		||||
        private Dictionary<string, List<string>> parseParameters(string parameters)
 | 
			
		||||
        {
 | 
			
		||||
			Dictionary<string, List<string>> result = new Dictionary<string, List<string>>();
 | 
			
		||||
            var result = new Dictionary<string, List<string>>();
 | 
			
		||||
            string name;
 | 
			
		||||
            string val;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -508,7 +551,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            if (pars.Length == 0)
 | 
			
		||||
                return result;
 | 
			
		||||
 | 
			
		||||
			foreach (string parameter in pars)
 | 
			
		||||
            foreach (var parameter in pars)
 | 
			
		||||
            {
 | 
			
		||||
                val = string.Empty;
 | 
			
		||||
                int i = parameter.IndexOf('=');
 | 
			
		||||
| 
						 | 
				
			
			@ -529,6 +572,7 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using AsterNET.FastAGI.Command;
 | 
			
		||||
using AsterNET.IO;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,15 +9,15 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AGIWriter
 | 
			
		||||
    {
 | 
			
		||||
		private IO.SocketConnection socket;
 | 
			
		||||
        private readonly SocketConnection socket;
 | 
			
		||||
 | 
			
		||||
		public AGIWriter(IO.SocketConnection socket)
 | 
			
		||||
        public AGIWriter(SocketConnection socket)
 | 
			
		||||
        {
 | 
			
		||||
            lock (this)
 | 
			
		||||
                this.socket = socket;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public void SendCommand(Command.AGICommand command)
 | 
			
		||||
        public void SendCommand(AGICommand command)
 | 
			
		||||
        {
 | 
			
		||||
            string buffer = command.BuildCommand() + "\n";
 | 
			
		||||
            try
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,16 @@
 | 
			
		|||
using AsterNET.FastAGI.MappingStrategies;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using AsterNET.FastAGI.MappingStrategies;
 | 
			
		||||
using AsterNET.IO;
 | 
			
		||||
using AsterNET.Util;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
    public class AsteriskFastAGI
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        #region Flags
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     If set to true, causes the AGIChannel to throw an exception when a status code of 511 (Channel Dead) is returned.
 | 
			
		||||
        ///     This is set to false by default to maintain backwards compatibility
 | 
			
		||||
| 
						 | 
				
			
			@ -20,32 +22,45 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        ///     This is set to false by default to maintain backwards compatibility
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool SCHANGUP_CAUSES_EXCEPTION = false;
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Variables
 | 
			
		||||
 | 
			
		||||
#if LOGGER
 | 
			
		||||
        private Logger logger = Logger.Instance();
 | 
			
		||||
        private readonly Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
		private IO.ServerSocket serverSocket;
 | 
			
		||||
        private ServerSocket serverSocket;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The port to listen on.</summary>
 | 
			
		||||
        private int port;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The address to listen on.</summary>
 | 
			
		||||
		private string address;
 | 
			
		||||
        private readonly string address;
 | 
			
		||||
 | 
			
		||||
        /// <summary>The thread pool that contains the worker threads to process incoming requests.</summary>
 | 
			
		||||
		private Util.ThreadPool pool;
 | 
			
		||||
		/// <summary>The number of worker threads in the thread pool. This equals the maximum number of concurrent requests this AGIServer can serve.</summary>
 | 
			
		||||
        private ThreadPool pool;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     The number of worker threads in the thread pool. This equals the maximum number of concurrent requests this
 | 
			
		||||
        ///     AGIServer can serve.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private int poolSize;
 | 
			
		||||
 | 
			
		||||
        /// <summary> True while this server is shut down. </summary>
 | 
			
		||||
        private bool stopped;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     The strategy to use for bind AGIRequests to AGIScripts that serve them.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private IMappingStrategy mappingStrategy;
 | 
			
		||||
 | 
			
		||||
        private Encoding socketEncoding = Encoding.ASCII;
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region PoolSize
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Sets the number of worker threads in the thread pool.<br />
 | 
			
		||||
        ///     This equals the maximum number of concurrent requests this AGIServer can serve.<br />
 | 
			
		||||
| 
						 | 
				
			
			@ -53,25 +68,26 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public int PoolSize
 | 
			
		||||
        {
 | 
			
		||||
			set { this.poolSize = value; }
 | 
			
		||||
            set { poolSize = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region BindPort
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Sets the TCP port to listen on for new connections.<br />
 | 
			
		||||
        ///     The default bind port is 4573.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int BindPort
 | 
			
		||||
        {
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.port = value;
 | 
			
		||||
			}
 | 
			
		||||
            set { port = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region MappingStrategy 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Sets the strategy to use for mapping AGIRequests to AGIScripts that serve them.<br />
 | 
			
		||||
        ///     The default mapping is a MappingStrategy.
 | 
			
		||||
| 
						 | 
				
			
			@ -79,96 +95,113 @@ namespace AsterNET.FastAGI
 | 
			
		|||
        /// <seealso cref="MappingStrategy" />
 | 
			
		||||
        public IMappingStrategy MappingStrategy
 | 
			
		||||
        {
 | 
			
		||||
			set { this.mappingStrategy = value; }
 | 
			
		||||
            set { mappingStrategy = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region SocketEncoding 
 | 
			
		||||
 | 
			
		||||
        public Encoding SocketEncoding
 | 
			
		||||
        {
 | 
			
		||||
			get { return this.socketEncoding; }
 | 
			
		||||
			set { this.socketEncoding = value; }
 | 
			
		||||
            get { return socketEncoding; }
 | 
			
		||||
            set { socketEncoding = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsteriskFastAGI()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AsteriskFastAGI.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public AsteriskFastAGI()
 | 
			
		||||
        {
 | 
			
		||||
			this.address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
			this.port = Common.AGI_BIND_PORT;
 | 
			
		||||
			this.poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
			this.mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
            address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            port = Common.AGI_BIND_PORT;
 | 
			
		||||
            poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
            mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsteriskFastAGI()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AsteriskFastAGI.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public AsteriskFastAGI(string mappingStrategy)
 | 
			
		||||
        {
 | 
			
		||||
			this.address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
			this.port = Common.AGI_BIND_PORT;
 | 
			
		||||
			this.poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
            address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            port = Common.AGI_BIND_PORT;
 | 
			
		||||
            poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
            this.mappingStrategy = new ResourceMappingStrategy(mappingStrategy);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsteriskFastAGI()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AsteriskFastAGI.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public AsteriskFastAGI(IMappingStrategy mappingStrategy)
 | 
			
		||||
        {
 | 
			
		||||
            this.address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            this.port = Common.AGI_BIND_PORT;
 | 
			
		||||
            this.poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
            address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            port = Common.AGI_BIND_PORT;
 | 
			
		||||
            poolSize = Common.AGI_POOL_SIZE;
 | 
			
		||||
            this.mappingStrategy = mappingStrategy;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AsteriskFastAGI(IMappingStrategy mappingStrategy, string ipaddress, int port, int poolSize)
 | 
			
		||||
        {
 | 
			
		||||
            this.address = ipaddress;
 | 
			
		||||
            address = ipaddress;
 | 
			
		||||
            this.port = port;
 | 
			
		||||
            this.poolSize = poolSize;
 | 
			
		||||
            this.mappingStrategy = mappingStrategy;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsteriskFastAGI(int port, int poolSize) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AsteriskFastAGI.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="port">The port to listen on.</param>
 | 
			
		||||
		/// <param name="poolSize">The number of worker threads in the thread pool.
 | 
			
		||||
		/// This equals the maximum number of concurrent requests this AGIServer can serve.</param>
 | 
			
		||||
        /// <param name="poolSize">
 | 
			
		||||
        ///     The number of worker threads in the thread pool.
 | 
			
		||||
        ///     This equals the maximum number of concurrent requests this AGIServer can serve.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public AsteriskFastAGI(int port, int poolSize)
 | 
			
		||||
        {
 | 
			
		||||
			this.address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            address = Common.AGI_BIND_ADDRESS;
 | 
			
		||||
            this.port = port;
 | 
			
		||||
            this.poolSize = poolSize;
 | 
			
		||||
			this.mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
            mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsteriskFastAGI(string address, int port, int poolSize) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AsteriskFastAGI.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ipaddress">The address to listen on.</param>
 | 
			
		||||
        /// <param name="port">The port to listen on.</param>
 | 
			
		||||
		/// <param name="poolSize">The number of worker threads in the thread pool.
 | 
			
		||||
		/// This equals the maximum number of concurrent requests this AGIServer can serve.</param>
 | 
			
		||||
        /// <param name="poolSize">
 | 
			
		||||
        ///     The number of worker threads in the thread pool.
 | 
			
		||||
        ///     This equals the maximum number of concurrent requests this AGIServer can serve.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public AsteriskFastAGI(string ipaddress, int port, int poolSize)
 | 
			
		||||
        {
 | 
			
		||||
			this.address = ipaddress;
 | 
			
		||||
            address = ipaddress;
 | 
			
		||||
            this.port = port;
 | 
			
		||||
            this.poolSize = poolSize;
 | 
			
		||||
			this.mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
            mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public AsteriskFastAGI(string ipaddress = Common.AGI_BIND_ADDRESS,
 | 
			
		||||
| 
						 | 
				
			
			@ -177,27 +210,28 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            bool sc511_CausesException = false,
 | 
			
		||||
            bool scHangUp_CausesException = false)
 | 
			
		||||
        {
 | 
			
		||||
            this.address = ipaddress; 
 | 
			
		||||
            address = ipaddress;
 | 
			
		||||
            this.port = port;
 | 
			
		||||
            this.poolSize = poolSize;
 | 
			
		||||
            this.mappingStrategy = new ResourceMappingStrategy(); 
 | 
			
		||||
            mappingStrategy = new ResourceMappingStrategy();
 | 
			
		||||
            SC511_CAUSES_EXCEPTION = sc511_CausesException;
 | 
			
		||||
            SCHANGUP_CAUSES_EXCEPTION = scHangUp_CausesException;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region Start() 
 | 
			
		||||
 | 
			
		||||
        public void Start()
 | 
			
		||||
        {
 | 
			
		||||
            stopped = false;
 | 
			
		||||
            mappingStrategy.Load();
 | 
			
		||||
			pool = new Util.ThreadPool("AGIServer", poolSize);
 | 
			
		||||
            pool = new ThreadPool("AGIServer", poolSize);
 | 
			
		||||
#if LOGGER
 | 
			
		||||
            logger.Info("Thread pool started.");
 | 
			
		||||
#endif
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
				IPAddress ipAddress = IPAddress.Parse(address);
 | 
			
		||||
				serverSocket = new IO.ServerSocket(port, ipAddress, this.SocketEncoding);
 | 
			
		||||
                var ipAddress = IPAddress.Parse(address);
 | 
			
		||||
                serverSocket = new ServerSocket(port, ipAddress, SocketEncoding);
 | 
			
		||||
            }
 | 
			
		||||
            catch (IOException ex)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -210,16 +244,16 @@ namespace AsterNET.FastAGI
 | 
			
		|||
            logger.Info("Listening on " + address + ":" + port + ".");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			AGIConnectionHandler connectionHandler;
 | 
			
		||||
			IO.SocketConnection socket;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                SocketConnection socket;
 | 
			
		||||
                while ((socket = serverSocket.Accept()) != null)
 | 
			
		||||
                {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                    logger.Info("Received connection.");
 | 
			
		||||
#endif
 | 
			
		||||
					connectionHandler = new AGIConnectionHandler(socket, mappingStrategy, this.SC511_CAUSES_EXCEPTION, this.SCHANGUP_CAUSES_EXCEPTION);
 | 
			
		||||
                    var connectionHandler = new AGIConnectionHandler(socket, mappingStrategy, SC511_CAUSES_EXCEPTION,
 | 
			
		||||
                        SCHANGUP_CAUSES_EXCEPTION);
 | 
			
		||||
                    pool.AddJob(connectionHandler);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -257,15 +291,18 @@ namespace AsterNET.FastAGI
 | 
			
		|||
#endif
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Stop() 
 | 
			
		||||
 | 
			
		||||
        public void Stop()
 | 
			
		||||
        {
 | 
			
		||||
            stopped = true;
 | 
			
		||||
            if (serverSocket != null)
 | 
			
		||||
                serverSocket.Close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Resources;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Resources;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.FastAGI
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -19,21 +19,21 @@ namespace AsterNET.FastAGI
 | 
			
		|||
    public class MappingStrategy : IMappingStrategy
 | 
			
		||||
    {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
		private Logger logger = Logger.Instance();
 | 
			
		||||
        private readonly Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
        private string resourceName;
 | 
			
		||||
        private Hashtable mapping;
 | 
			
		||||
 | 
			
		||||
        public MappingStrategy()
 | 
			
		||||
        {
 | 
			
		||||
			this.resourceName = Common.AGI_DEFAULT_RESOURCE_BUNDLE_NAME;
 | 
			
		||||
			this.mapping = null;
 | 
			
		||||
            resourceName = Common.AGI_DEFAULT_RESOURCE_BUNDLE_NAME;
 | 
			
		||||
            mapping = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public MappingStrategy(string resourceName)
 | 
			
		||||
        {
 | 
			
		||||
            this.resourceName = resourceName;
 | 
			
		||||
			this.mapping = null;
 | 
			
		||||
            mapping = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AGIScript DetermineScript(AGIRequest request)
 | 
			
		||||
| 
						 | 
				
			
			@ -57,9 +57,9 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                    mapping = null;
 | 
			
		||||
                    resourceName = null;
 | 
			
		||||
                }
 | 
			
		||||
				else if (this.resourceName != value)
 | 
			
		||||
                else if (resourceName != value)
 | 
			
		||||
                {
 | 
			
		||||
					this.resourceName = value;
 | 
			
		||||
                    resourceName = value;
 | 
			
		||||
                    Load();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -78,14 +78,15 @@ namespace AsterNET.FastAGI
 | 
			
		|||
                mapping.Clear();
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
					ResourceReader rr = new ResourceReader(AppDomain.CurrentDomain.BaseDirectory + resourceName);
 | 
			
		||||
                    var rr = new ResourceReader(AppDomain.CurrentDomain.BaseDirectory + resourceName);
 | 
			
		||||
                    foreach (DictionaryEntry de in rr)
 | 
			
		||||
                    {
 | 
			
		||||
                        scriptName = (string) de.Key;
 | 
			
		||||
                        className = (string) de.Value;
 | 
			
		||||
                        agiScript = CreateAGIScriptInstance(className);
 | 
			
		||||
                        if (mapping.Contains(scriptName))
 | 
			
		||||
							throw new AGIException(String.Format("Duplicate mapping name '{0}' in file {1}", scriptName, resourceName));
 | 
			
		||||
                            throw new AGIException(String.Format("Duplicate mapping name '{0}' in file {1}", scriptName,
 | 
			
		||||
                                resourceName));
 | 
			
		||||
                        mapping.Add(scriptName, agiScript);
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                        logger.Info("Added mapping for '" + scriptName + "' to class " + agiScript.GetType().FullName);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +1,12 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Specialized;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Security.Cryptography;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using AsterNET.Manager;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
using AsterNET.Manager.Response;
 | 
			
		||||
using AsterNET.Manager;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -17,24 +14,31 @@ namespace AsterNET
 | 
			
		|||
    {
 | 
			
		||||
        private static CultureInfo defaultCulture;
 | 
			
		||||
#if LOGGER
 | 
			
		||||
		private static Logger logger = Logger.Instance();
 | 
			
		||||
        private static readonly Logger logger = Logger.Instance();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        #region CultureInfo 
 | 
			
		||||
 | 
			
		||||
        internal static CultureInfo CultureInfo
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (defaultCulture == null)
 | 
			
		||||
					defaultCulture = System.Globalization.CultureInfo.GetCultureInfo("en");
 | 
			
		||||
                    defaultCulture = CultureInfo.GetCultureInfo("en");
 | 
			
		||||
                return defaultCulture;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ToHexString(sbyte[]) 
 | 
			
		||||
 | 
			
		||||
        /// <summary> The hex digits used to build a hex string representation of a byte array.</summary>
 | 
			
		||||
		internal static readonly char[] hexChar = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
 | 
			
		||||
        internal static readonly char[] hexChar =
 | 
			
		||||
        {
 | 
			
		||||
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
 | 
			
		||||
            'e', 'f'
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Converts a byte array to a hex string representing it. The hex digits are lower case.
 | 
			
		||||
| 
						 | 
				
			
			@ -43,17 +47,19 @@ namespace AsterNET
 | 
			
		|||
        /// <returns> the hex representation of b</returns>
 | 
			
		||||
        internal static string ToHexString(sbyte[] b)
 | 
			
		||||
        {
 | 
			
		||||
			StringBuilder sb = new StringBuilder(b.Length * 2);
 | 
			
		||||
            var sb = new StringBuilder(b.Length*2);
 | 
			
		||||
            for (int i = 0; i < b.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
				sb.Append(hexChar[Helper.URShift((b[i] & 0xf0), 4)]);
 | 
			
		||||
                sb.Append(hexChar[URShift((b[i] & 0xf0), 4)]);
 | 
			
		||||
                sb.Append(hexChar[b[i] & 0x0f]);
 | 
			
		||||
            }
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetInternalActionId(actionId) 
 | 
			
		||||
 | 
			
		||||
        internal static string GetInternalActionId(string actionId)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrEmpty(actionId))
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +69,11 @@ namespace AsterNET
 | 
			
		|||
                return actionId.Substring(0, delimiterIndex).Trim();
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region StripInternalActionId(actionId) 
 | 
			
		||||
 | 
			
		||||
        internal static string StripInternalActionId(string actionId)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrEmpty(actionId))
 | 
			
		||||
| 
						 | 
				
			
			@ -75,14 +83,15 @@ namespace AsterNET
 | 
			
		|||
            {
 | 
			
		||||
                if (actionId.Length > delimiterIndex + 1)
 | 
			
		||||
                    return actionId.Substring(delimiterIndex + 1).Trim();
 | 
			
		||||
                else
 | 
			
		||||
                return actionId.Substring(0, delimiterIndex).Trim();
 | 
			
		||||
            }
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region IsTrue(string) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Checks if a String represents <code>true</code> or <code>false</code> according to Asterisk's logic.<br />
 | 
			
		||||
        ///     The original implementation is <code>util.c</code> is as follows:
 | 
			
		||||
| 
						 | 
				
			
			@ -96,14 +105,16 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            if (s == null || s.Length == 0)
 | 
			
		||||
                return false;
 | 
			
		||||
			string sx = s.ToLower(Helper.CultureInfo);
 | 
			
		||||
            string sx = s.ToLower(CultureInfo);
 | 
			
		||||
            if (sx == "yes" || sx == "true" || sx == "y" || sx == "t" || sx == "1" || sx == "on")
 | 
			
		||||
                return true;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region URShift(...) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Performs an unsigned bitwise right shift with the specified number
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +125,6 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            if (number >= 0)
 | 
			
		||||
                return number >> bits;
 | 
			
		||||
			else
 | 
			
		||||
            return (number >> bits) + (2 << ~bits);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +149,6 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            if (number >= 0)
 | 
			
		||||
                return number >> bits;
 | 
			
		||||
			else
 | 
			
		||||
            return (number >> bits) + (2L << ~bits);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -153,9 +162,11 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            return URShift(number, (int) bits);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ToArray(ICollection c, object[] objects) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Obtains an array containing all the elements of the collection.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +177,7 @@ namespace AsterNET
 | 
			
		|||
            int index = 0;
 | 
			
		||||
 | 
			
		||||
            Type type = objects.GetType().GetElementType();
 | 
			
		||||
			object[] objs = (object[])Array.CreateInstance(type, c.Count);
 | 
			
		||||
            var objs = (object[]) Array.CreateInstance(type, c.Count);
 | 
			
		||||
 | 
			
		||||
            IEnumerator e = c.GetEnumerator();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -179,9 +190,11 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
            return objs;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ParseVariables(Dictionary<string, string> dictionary, string variables, char[] delim)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Parse variable(s) string to dictionary.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +202,8 @@ namespace AsterNET
 | 
			
		|||
        /// <param name="variables">variable(a) string</param>
 | 
			
		||||
        /// <param name="delim">variable pairs delimiter</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
		internal static Dictionary<string, string> ParseVariables(Dictionary<string, string> dictionary, string variables, char[] delim)
 | 
			
		||||
        internal static Dictionary<string, string> ParseVariables(Dictionary<string, string> dictionary,
 | 
			
		||||
            string variables, char[] delim)
 | 
			
		||||
        {
 | 
			
		||||
            if (dictionary == null)
 | 
			
		||||
                dictionary = new Dictionary<string, string>();
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +215,7 @@ namespace AsterNET
 | 
			
		|||
            string[] vars = variables.Split(delim);
 | 
			
		||||
            int idx;
 | 
			
		||||
            string vname, vval;
 | 
			
		||||
			foreach (string var in vars)
 | 
			
		||||
            foreach (var var in vars)
 | 
			
		||||
            {
 | 
			
		||||
                idx = var.IndexOf('=');
 | 
			
		||||
                if (idx > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -218,9 +232,11 @@ namespace AsterNET
 | 
			
		|||
            }
 | 
			
		||||
            return dictionary;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region JoinVariables(IDictionary dictionary, string delim) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Join variables dictionary to string.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -231,11 +247,12 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            return JoinVariables(dictionary, new string(delim), delimKeyValue);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal static string JoinVariables(IDictionary dictionary, string delim, string delimKeyValue)
 | 
			
		||||
        {
 | 
			
		||||
            if (dictionary == null)
 | 
			
		||||
                return string.Empty;
 | 
			
		||||
			StringBuilder sb = new StringBuilder();
 | 
			
		||||
            var sb = new StringBuilder();
 | 
			
		||||
            foreach (DictionaryEntry var in dictionary)
 | 
			
		||||
            {
 | 
			
		||||
                if (sb.Length > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -244,26 +261,32 @@ namespace AsterNET
 | 
			
		|||
            }
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetMillisecondsFrom(DateTime start) 
 | 
			
		||||
 | 
			
		||||
        internal static long GetMillisecondsFrom(DateTime start)
 | 
			
		||||
        {
 | 
			
		||||
			TimeSpan ts = (TimeSpan)(DateTime.Now - start);
 | 
			
		||||
            TimeSpan ts = DateTime.Now - start;
 | 
			
		||||
            return (long) ts.TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ParseString(string val) 
 | 
			
		||||
 | 
			
		||||
        internal static object ParseString(string val)
 | 
			
		||||
        {
 | 
			
		||||
            if (val == "none")
 | 
			
		||||
                return string.Empty;
 | 
			
		||||
            return val;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetGetters(class) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns a Map of getter methods of the given class.<br />
 | 
			
		||||
        ///     The key of the map contains the name of the attribute that can be accessed by the getter, the
 | 
			
		||||
| 
						 | 
				
			
			@ -278,7 +301,7 @@ namespace AsterNET
 | 
			
		|||
            string methodName;
 | 
			
		||||
            MethodInfo method;
 | 
			
		||||
 | 
			
		||||
			Dictionary<string, MethodInfo> accessors = new Dictionary<string, MethodInfo>();
 | 
			
		||||
            var accessors = new Dictionary<string, MethodInfo>();
 | 
			
		||||
            MethodInfo[] methods = clazz.GetMethods();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < methods.Length; i++)
 | 
			
		||||
| 
						 | 
				
			
			@ -297,9 +320,11 @@ namespace AsterNET
 | 
			
		|||
            }
 | 
			
		||||
            return accessors;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetSetters(Type clazz) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns a Map of setter methods of the given class.<br />
 | 
			
		||||
        ///     The key of the map contains the name of the attribute that can be accessed by the setter, the
 | 
			
		||||
| 
						 | 
				
			
			@ -323,15 +348,17 @@ namespace AsterNET
 | 
			
		|||
                // skip not "set..." methods and  skip methods with != 1 parameters
 | 
			
		||||
                if (!methodName.StartsWith("set_") || method.GetParameters().Length != 1)
 | 
			
		||||
                    continue;
 | 
			
		||||
				name = methodName.Substring("set_".Length).ToLower(Helper.CultureInfo);
 | 
			
		||||
                name = methodName.Substring("set_".Length).ToLower(CultureInfo);
 | 
			
		||||
                if (name.Length == 0) continue;
 | 
			
		||||
                accessors[name] = method;
 | 
			
		||||
            }
 | 
			
		||||
            return accessors;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ToString(object obj) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Convert object with all properties to string
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -340,26 +367,27 @@ namespace AsterNET
 | 
			
		|||
        internal static string ToString(object obj)
 | 
			
		||||
        {
 | 
			
		||||
            object value;
 | 
			
		||||
			StringBuilder sb = new StringBuilder(obj.GetType().Name, 1024);
 | 
			
		||||
            var sb = new StringBuilder(obj.GetType().Name, 1024);
 | 
			
		||||
            sb.Append(" {");
 | 
			
		||||
            string strValue;
 | 
			
		||||
			IDictionary getters = Helper.GetGetters(obj.GetType());
 | 
			
		||||
            IDictionary getters = GetGetters(obj.GetType());
 | 
			
		||||
            bool notFirst = false;
 | 
			
		||||
			List<MethodInfo> arrays = new List<MethodInfo>();
 | 
			
		||||
            var arrays = new List<MethodInfo>();
 | 
			
		||||
            // First step - all values properties (not a list)
 | 
			
		||||
            foreach (string name in getters.Keys)
 | 
			
		||||
            {
 | 
			
		||||
				MethodInfo getter = (MethodInfo)getters[name];
 | 
			
		||||
                var getter = (MethodInfo) getters[name];
 | 
			
		||||
                Type propType = getter.ReturnType;
 | 
			
		||||
                if (propType == typeof (object))
 | 
			
		||||
                    continue;
 | 
			
		||||
				if (!(propType == typeof(string) || propType == typeof(bool) || propType == typeof(double) || propType == typeof(DateTime) || propType == typeof(int) || propType == typeof(long)))
 | 
			
		||||
                if (
 | 
			
		||||
                    !(propType == typeof (string) || propType == typeof (bool) || propType == typeof (double) ||
 | 
			
		||||
                      propType == typeof (DateTime) || propType == typeof (int) || propType == typeof (long)))
 | 
			
		||||
                {
 | 
			
		||||
                    string propTypeName = propType.Name;
 | 
			
		||||
                    if (propTypeName.StartsWith("Dictionary") || propTypeName.StartsWith("List"))
 | 
			
		||||
                    {
 | 
			
		||||
                        arrays.Add(getter);
 | 
			
		||||
						continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -387,28 +415,28 @@ namespace AsterNET
 | 
			
		|||
                }
 | 
			
		||||
                else if (value is double)
 | 
			
		||||
                {
 | 
			
		||||
					double d = (double)value;
 | 
			
		||||
                    var d = (double) value;
 | 
			
		||||
                    if (d == 0.0)
 | 
			
		||||
                        continue;
 | 
			
		||||
                    strValue = d.ToString();
 | 
			
		||||
                }
 | 
			
		||||
                else if (value is DateTime)
 | 
			
		||||
                {
 | 
			
		||||
					DateTime dt = (DateTime)value;
 | 
			
		||||
                    var dt = (DateTime) value;
 | 
			
		||||
                    if (dt == DateTime.MinValue)
 | 
			
		||||
                        continue;
 | 
			
		||||
                    strValue = dt.ToLongTimeString();
 | 
			
		||||
                }
 | 
			
		||||
                else if (value is int)
 | 
			
		||||
                {
 | 
			
		||||
					int i = (int)value;
 | 
			
		||||
                    var i = (int) value;
 | 
			
		||||
                    if (i == 0)
 | 
			
		||||
                        continue;
 | 
			
		||||
                    strValue = i.ToString();
 | 
			
		||||
                }
 | 
			
		||||
                else if (value is long)
 | 
			
		||||
                {
 | 
			
		||||
					long l = (long)value;
 | 
			
		||||
                    var l = (long) value;
 | 
			
		||||
                    if (l == 0)
 | 
			
		||||
                        continue;
 | 
			
		||||
                    strValue = l.ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +451,7 @@ namespace AsterNET
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            // Second step - all lists
 | 
			
		||||
			foreach (MethodInfo getter in arrays)
 | 
			
		||||
            foreach (var getter in arrays)
 | 
			
		||||
            {
 | 
			
		||||
                value = null;
 | 
			
		||||
                try
 | 
			
		||||
| 
						 | 
				
			
			@ -438,6 +466,7 @@ namespace AsterNET
 | 
			
		|||
                    continue;
 | 
			
		||||
 | 
			
		||||
                #region List 
 | 
			
		||||
 | 
			
		||||
                IList list;
 | 
			
		||||
                if (value is IList && (list = (IList) value).Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -447,20 +476,19 @@ namespace AsterNET
 | 
			
		|||
                    sb.Append(getter.Name.Substring(4));
 | 
			
		||||
                    sb.Append(":[");
 | 
			
		||||
                    bool notFirst2 = false;
 | 
			
		||||
					foreach (object o in list)
 | 
			
		||||
                    foreach (var o in list)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (notFirst2)
 | 
			
		||||
                            sb.Append("; ");
 | 
			
		||||
                        notFirst2 = true;
 | 
			
		||||
						sb.Append(o.ToString());
 | 
			
		||||
                        sb.Append(o);
 | 
			
		||||
                    }
 | 
			
		||||
                    sb.Append("]");
 | 
			
		||||
					continue;
 | 
			
		||||
                }
 | 
			
		||||
                    #endregion
 | 
			
		||||
 | 
			
		||||
                    #region IDictionary 
 | 
			
		||||
				else if (value is IDictionary && ((IDictionary)value).Count > 0)
 | 
			
		||||
                if (value is IDictionary && ((IDictionary) value).Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    if (notFirst)
 | 
			
		||||
                        sb.Append("; ");
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +496,7 @@ namespace AsterNET
 | 
			
		|||
                    sb.Append(getter.Name.Substring(4));
 | 
			
		||||
                    sb.Append(":[");
 | 
			
		||||
                    bool notFirst2 = false;
 | 
			
		||||
					foreach (object key in ((IDictionary)value).Keys)
 | 
			
		||||
                    foreach (var key in ((IDictionary) value).Keys)
 | 
			
		||||
                    {
 | 
			
		||||
                        object o = ((IDictionary) value)[key];
 | 
			
		||||
                        if (notFirst2)
 | 
			
		||||
| 
						 | 
				
			
			@ -477,17 +505,19 @@ namespace AsterNET
 | 
			
		|||
                        sb.Append(string.Concat(key, ":", o));
 | 
			
		||||
                    }
 | 
			
		||||
                    sb.Append("]");
 | 
			
		||||
					continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                #endregion
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            sb.Append("}");
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region SetAttributes(object evt, IDictionary attributes) 
 | 
			
		||||
 | 
			
		||||
        internal static void SetAttributes(IParseSupport o, Dictionary<string, string> attributes)
 | 
			
		||||
        {
 | 
			
		||||
            Type dataType;
 | 
			
		||||
| 
						 | 
				
			
			@ -496,9 +526,9 @@ namespace AsterNET
 | 
			
		|||
            // Preparse attributes
 | 
			
		||||
            attributes = o.ParseSpecial(attributes);
 | 
			
		||||
 | 
			
		||||
			IDictionary setters = Helper.GetSetters(o.GetType());
 | 
			
		||||
            IDictionary setters = GetSetters(o.GetType());
 | 
			
		||||
            MethodInfo setter;
 | 
			
		||||
			foreach (string name in attributes.Keys)
 | 
			
		||||
            foreach (var name in attributes.Keys)
 | 
			
		||||
            {
 | 
			
		||||
                if (name == "event")
 | 
			
		||||
                    continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -511,7 +541,7 @@ namespace AsterNET
 | 
			
		|||
                if (setter == null)
 | 
			
		||||
                {
 | 
			
		||||
                    // No setter found to key, try general parser
 | 
			
		||||
					if (!o.Parse(name, (string)attributes[name]))
 | 
			
		||||
                    if (!o.Parse(name, attributes[name]))
 | 
			
		||||
                    {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                        logger.Error("Unable to set property '" + name + "' on " + o.GetType() + ": no setter");
 | 
			
		||||
| 
						 | 
				
			
			@ -523,43 +553,45 @@ namespace AsterNET
 | 
			
		|||
                {
 | 
			
		||||
                    dataType = (setter.GetParameters()[0]).ParameterType;
 | 
			
		||||
                    if (dataType == typeof (bool))
 | 
			
		||||
						val = Helper.IsTrue((string)attributes[name]);
 | 
			
		||||
                        val = IsTrue(attributes[name]);
 | 
			
		||||
                    else if (dataType == typeof (string))
 | 
			
		||||
						val = Helper.ParseString((string)attributes[name]);
 | 
			
		||||
                        val = ParseString(attributes[name]);
 | 
			
		||||
                    else if (dataType == typeof (Int32))
 | 
			
		||||
                    {
 | 
			
		||||
                        Int32 v = 0;
 | 
			
		||||
						Int32.TryParse((string)attributes[name], out v);
 | 
			
		||||
                        Int32.TryParse(attributes[name], out v);
 | 
			
		||||
                        val = v;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (dataType == typeof (Int64))
 | 
			
		||||
                    {
 | 
			
		||||
                        Int64 v = 0;
 | 
			
		||||
						Int64.TryParse((string)attributes[name], out v);
 | 
			
		||||
                        Int64.TryParse(attributes[name], out v);
 | 
			
		||||
                        val = v;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (dataType == typeof (double))
 | 
			
		||||
                    {
 | 
			
		||||
                        Double v = 0.0;
 | 
			
		||||
						Double.TryParse((string)attributes[name], System.Globalization.NumberStyles.AllowDecimalPoint, Common.CultureInfoEn, out v);
 | 
			
		||||
                        Double.TryParse(attributes[name], NumberStyles.AllowDecimalPoint, Common.CultureInfoEn, out v);
 | 
			
		||||
                        val = v;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (dataType == typeof (decimal))
 | 
			
		||||
                    {
 | 
			
		||||
                        Decimal v = 0;
 | 
			
		||||
						Decimal.TryParse((string)attributes[name], System.Globalization.NumberStyles.AllowDecimalPoint, Common.CultureInfoEn, out v);
 | 
			
		||||
                        Decimal.TryParse(attributes[name], NumberStyles.AllowDecimalPoint, Common.CultureInfoEn, out v);
 | 
			
		||||
                        val = v;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (dataType.IsEnum)
 | 
			
		||||
                    {
 | 
			
		||||
                        try
 | 
			
		||||
                        {
 | 
			
		||||
							val = Convert.ChangeType(Enum.Parse(dataType, (string)attributes[name], true), dataType);
 | 
			
		||||
                            val = Convert.ChangeType(Enum.Parse(dataType, attributes[name], true), dataType);
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception ex)
 | 
			
		||||
                        {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
							logger.Error("Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " + o.GetType() + " to required enum type " + dataType, ex);
 | 
			
		||||
                            logger.Error(
 | 
			
		||||
                                "Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " +
 | 
			
		||||
                                o.GetType() + " to required enum type " + dataType, ex);
 | 
			
		||||
                            continue;
 | 
			
		||||
#else
 | 
			
		||||
							throw new ManagerException("Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " + o.GetType() + " to required enum type " + dataType, ex); 
 | 
			
		||||
| 
						 | 
				
			
			@ -570,13 +602,15 @@ namespace AsterNET
 | 
			
		|||
                    {
 | 
			
		||||
                        try
 | 
			
		||||
                        {
 | 
			
		||||
							ConstructorInfo constructor = dataType.GetConstructor(new Type[] { typeof(string) });
 | 
			
		||||
                            ConstructorInfo constructor = dataType.GetConstructor(new[] {typeof (string)});
 | 
			
		||||
                            val = constructor.Invoke(new object[] {attributes[name]});
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception ex)
 | 
			
		||||
                        {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
							logger.Error("Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " + o.GetType() + " to required type " + dataType, ex);
 | 
			
		||||
                            logger.Error(
 | 
			
		||||
                                "Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " +
 | 
			
		||||
                                o.GetType() + " to required type " + dataType, ex);
 | 
			
		||||
                            continue;
 | 
			
		||||
#else
 | 
			
		||||
							throw new ManagerException("Unable to convert value '" + attributes[name] + "' of property '" + name + "' on " + o.GetType() + " to required type " + dataType, ex);
 | 
			
		||||
| 
						 | 
				
			
			@ -586,13 +620,12 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
						setter.Invoke(o, new object[] { val });
 | 
			
		||||
                        setter.Invoke(o, new[] {val});
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
#if LOGGER
 | 
			
		||||
                        logger.Error("Unable to set property '" + name + "' on " + o.GetType(), ex);
 | 
			
		||||
						continue;
 | 
			
		||||
#else
 | 
			
		||||
						throw new ManagerException("Unable to set property '" + name + "' on " + o.GetType(), ex);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -600,15 +633,17 @@ namespace AsterNET
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region AddKeyValue(IDictionary list, string line) 
 | 
			
		||||
 | 
			
		||||
        internal static void AddKeyValue(IDictionary list, string line)
 | 
			
		||||
        {
 | 
			
		||||
            int delimiterIndex = line.IndexOf(":");
 | 
			
		||||
            if (delimiterIndex > 0 && line.Length > delimiterIndex + 1)
 | 
			
		||||
            {
 | 
			
		||||
				string name = line.Substring(0, delimiterIndex).ToLower(Helper.CultureInfo).Trim();
 | 
			
		||||
                string name = line.Substring(0, delimiterIndex).ToLower(CultureInfo).Trim();
 | 
			
		||||
                string val = line.Substring(delimiterIndex + 1).Trim();
 | 
			
		||||
                if (val == "<null>")
 | 
			
		||||
                    list[name] = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -616,9 +651,11 @@ namespace AsterNET
 | 
			
		|||
                    list[name] = val;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region stripIllegalCharacters(string s) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Strips all illegal charaters from the given lower case string.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -637,21 +674,18 @@ namespace AsterNET
 | 
			
		|||
                c = s[i];
 | 
			
		||||
                if (c >= '0' && c <= '9')
 | 
			
		||||
                    continue;
 | 
			
		||||
				else if (c >= 'a' && c <= 'z')
 | 
			
		||||
                if (c >= 'a' && c <= 'z')
 | 
			
		||||
                    continue;
 | 
			
		||||
				else if (c >= 'A' && c <= 'Z')
 | 
			
		||||
                if (c >= 'A' && c <= 'Z')
 | 
			
		||||
                    continue;
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
                needsStrip = true;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
            if (!needsStrip)
 | 
			
		||||
                return s;
 | 
			
		||||
 | 
			
		||||
			StringBuilder sb = new StringBuilder(s.Length);
 | 
			
		||||
            var sb = new StringBuilder(s.Length);
 | 
			
		||||
            for (int i = 0; i < s.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                c = s[i];
 | 
			
		||||
| 
						 | 
				
			
			@ -665,9 +699,11 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region BuildResponse(IDictionary attributes) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Constructs an instance of ManagerResponse based on a map of attributes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -677,7 +713,7 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            ManagerResponse response;
 | 
			
		||||
 | 
			
		||||
			string responseType = ((string)attributes["response"]).ToLower(Helper.CultureInfo);
 | 
			
		||||
            string responseType = attributes["response"].ToLower(CultureInfo);
 | 
			
		||||
 | 
			
		||||
            // Determine type
 | 
			
		||||
            if (responseType == "error")
 | 
			
		||||
| 
						 | 
				
			
			@ -686,33 +722,38 @@ namespace AsterNET
 | 
			
		|||
                response = new ChallengeResponse();
 | 
			
		||||
            else if (attributes.ContainsKey("mailbox") && attributes.ContainsKey("waiting"))
 | 
			
		||||
                response = new MailboxStatusResponse();
 | 
			
		||||
			else if (attributes.ContainsKey("mailbox") && attributes.ContainsKey("newmessages") && attributes.ContainsKey("oldmessages"))
 | 
			
		||||
            else if (attributes.ContainsKey("mailbox") && attributes.ContainsKey("newmessages") &&
 | 
			
		||||
                     attributes.ContainsKey("oldmessages"))
 | 
			
		||||
                response = new MailboxCountResponse();
 | 
			
		||||
			else if (attributes.ContainsKey("exten") && attributes.ContainsKey("context") && attributes.ContainsKey("hint") && attributes.ContainsKey("status"))
 | 
			
		||||
            else if (attributes.ContainsKey("exten") && attributes.ContainsKey("context") &&
 | 
			
		||||
                     attributes.ContainsKey("hint") && attributes.ContainsKey("status"))
 | 
			
		||||
                response = new ExtensionStateResponse();
 | 
			
		||||
            else
 | 
			
		||||
                response = new ManagerResponse();
 | 
			
		||||
 | 
			
		||||
			Helper.SetAttributes(response, attributes);
 | 
			
		||||
            SetAttributes(response, attributes);
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region BuildEvent(Hashtable list, object source, IDictionary attributes) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Builds the event based on the given map of attributes and the registered event classes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="source">source attribute for the event</param>
 | 
			
		||||
        /// <param name="attributes">map containing event attributes</param>
 | 
			
		||||
        /// <returns>a concrete instance of ManagerEvent or <code>null</code> if no event class was registered for the event type.</returns>
 | 
			
		||||
		internal static ManagerEvent BuildEvent(IDictionary<int, ConstructorInfo> list, ManagerConnection source, Dictionary<string, string> attributes)
 | 
			
		||||
        internal static ManagerEvent BuildEvent(IDictionary<int, ConstructorInfo> list, ManagerConnection source,
 | 
			
		||||
            Dictionary<string, string> attributes)
 | 
			
		||||
        {
 | 
			
		||||
            ManagerEvent e;
 | 
			
		||||
            string eventType;
 | 
			
		||||
            ConstructorInfo constructor = null;
 | 
			
		||||
            int hash, hashEvent;
 | 
			
		||||
 | 
			
		||||
			eventType = ((string)attributes["event"]).ToLower(Helper.CultureInfo);
 | 
			
		||||
            eventType = attributes["event"].ToLower(CultureInfo);
 | 
			
		||||
            // Remove Event tail from event name (ex. JabberEvent)
 | 
			
		||||
            if (eventType.EndsWith("event"))
 | 
			
		||||
                eventType = eventType.Substring(0, eventType.Length - 5);
 | 
			
		||||
| 
						 | 
				
			
			@ -720,7 +761,7 @@ namespace AsterNET
 | 
			
		|||
 | 
			
		||||
            if (eventType == "user")
 | 
			
		||||
            {
 | 
			
		||||
				string userevent = ((string)attributes["userevent"]).ToLower(Helper.CultureInfo);
 | 
			
		||||
                string userevent = attributes["userevent"].ToLower(CultureInfo);
 | 
			
		||||
                hash = string.Concat(eventType, userevent).GetHashCode();
 | 
			
		||||
                if (list.ContainsKey(hash))
 | 
			
		||||
                    constructor = list[hash];
 | 
			
		||||
| 
						 | 
				
			
			@ -756,20 +797,22 @@ namespace AsterNET
 | 
			
		|||
            // the corresponding ManagerAction.
 | 
			
		||||
            if (e is ResponseEvent)
 | 
			
		||||
            {
 | 
			
		||||
				ResponseEvent responseEvent = (ResponseEvent)e;
 | 
			
		||||
                var responseEvent = (ResponseEvent) e;
 | 
			
		||||
                string actionId = responseEvent.ActionId;
 | 
			
		||||
                if (actionId != null)
 | 
			
		||||
                {
 | 
			
		||||
					responseEvent.ActionId = Helper.StripInternalActionId(actionId);
 | 
			
		||||
					responseEvent.InternalActionId = Helper.GetInternalActionId(actionId);
 | 
			
		||||
                    responseEvent.ActionId = StripInternalActionId(actionId);
 | 
			
		||||
                    responseEvent.InternalActionId = GetInternalActionId(actionId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return e;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RegisterBuiltinEventClasses(Hashtable list) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Register buildin Event classes
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -778,13 +821,15 @@ namespace AsterNET
 | 
			
		|||
        {
 | 
			
		||||
            Assembly assembly = Assembly.GetExecutingAssembly();
 | 
			
		||||
            Type manager = typeof (ManagerEvent);
 | 
			
		||||
			foreach (Type type in assembly.GetTypes())
 | 
			
		||||
            foreach (var type in assembly.GetTypes())
 | 
			
		||||
                if (type.IsPublic && !type.IsAbstract && manager.IsAssignableFrom(type))
 | 
			
		||||
                    RegisterEventClass(list, type);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RegisterEventClass(Dictionary<string, ConstructorInfo> list, Type clazz)
 | 
			
		||||
 | 
			
		||||
        internal static void RegisterEventClass(Dictionary<int, ConstructorInfo> list, Type clazz)
 | 
			
		||||
        {
 | 
			
		||||
            // Ignore all abstract classes
 | 
			
		||||
| 
						 | 
				
			
			@ -792,7 +837,7 @@ namespace AsterNET
 | 
			
		|||
            if (clazz.IsAbstract || !typeof (ManagerEvent).IsAssignableFrom(clazz))
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
			string eventType = clazz.Name.ToLower(Helper.CultureInfo);
 | 
			
		||||
            string eventType = clazz.Name.ToLower(CultureInfo);
 | 
			
		||||
 | 
			
		||||
            // Remove "event" at the end (if presents)
 | 
			
		||||
            if (eventType.EndsWith("event"))
 | 
			
		||||
| 
						 | 
				
			
			@ -809,7 +854,7 @@ namespace AsterNET
 | 
			
		|||
            ConstructorInfo constructor = null;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
				constructor = clazz.GetConstructor(new Type[] { typeof(ManagerConnection) });
 | 
			
		||||
                constructor = clazz.GetConstructor(new[] {typeof (ManagerConnection)});
 | 
			
		||||
            }
 | 
			
		||||
            catch (MethodAccessException ex)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -821,9 +866,11 @@ namespace AsterNET
 | 
			
		|||
            else
 | 
			
		||||
                throw new ArgumentException("RegisterEventClass : " + clazz + " has no public default constructor");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region RegisterEventHandler(Dictionary<int, int> list, int index, Type eventType) 
 | 
			
		||||
 | 
			
		||||
        internal static void RegisterEventHandler(Dictionary<int, int> list, int index, Type eventType)
 | 
			
		||||
        {
 | 
			
		||||
            int eventHash = eventType.Name.GetHashCode();
 | 
			
		||||
| 
						 | 
				
			
			@ -831,6 +878,7 @@ namespace AsterNET
 | 
			
		|||
                throw new ArgumentException("Event class already registered : " + eventType.Name);
 | 
			
		||||
            list.Add(eventHash, index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,15 +1,10 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET
 | 
			
		||||
{
 | 
			
		||||
    internal interface IParseSupport
 | 
			
		||||
    {
 | 
			
		||||
		Dictionary<string, string> Attributes
 | 
			
		||||
		{
 | 
			
		||||
			get;
 | 
			
		||||
		}
 | 
			
		||||
        Dictionary<string, string> Attributes { get; }
 | 
			
		||||
        bool Parse(string key, string value);
 | 
			
		||||
        Dictionary<string, string> ParseSpecial(Dictionary<string, string> attributes);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,48 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET
 | 
			
		||||
{
 | 
			
		||||
#if LOGGER
 | 
			
		||||
 | 
			
		||||
    #region class LogFactory 
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     Facade to hide details of the underlying logging system.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public sealed class Logger
 | 
			
		||||
    {
 | 
			
		||||
        public enum MessageLevel
 | 
			
		||||
        {
 | 
			
		||||
            Info,
 | 
			
		||||
            Warning,
 | 
			
		||||
            Error,
 | 
			
		||||
            Debug
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static Logger logger;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private Hashtable visibleDebug = new Hashtable();
 | 
			
		||||
 | 
			
		||||
        private bool visibleDebugDef = true;
 | 
			
		||||
        private Hashtable visibleError = new Hashtable();
 | 
			
		||||
        private bool visibleErrorDef = true;
 | 
			
		||||
        private Hashtable visibleInfo = new Hashtable();
 | 
			
		||||
        private bool visibleInfoDef = true;
 | 
			
		||||
        private Hashtable visibleWarning = new Hashtable();
 | 
			
		||||
        private bool visibleWarningDef = true;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new CommonsLoggingLog obtained from commons-logging's LogFactory for the given class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Logger()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns an instance of Log suitable for logging from the given class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,25 +54,11 @@ namespace AsterNET
 | 
			
		|||
            return logger;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public enum MessageLevel
 | 
			
		||||
		{
 | 
			
		||||
			Info,
 | 
			
		||||
			Warning,
 | 
			
		||||
			Error,
 | 
			
		||||
			Debug
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new CommonsLoggingLog obtained from commons-logging's LogFactory for the given class.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public Logger()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        private void writeLine(string type, string msg)
 | 
			
		||||
        {
 | 
			
		||||
			System.Diagnostics.Debug.Print(string.Format("{0}[{1}] {2}", type, Thread.CurrentThread.Name, msg));
 | 
			
		||||
            System.Diagnostics.Debug.Print("{0}[{1}] {2}", type, Thread.CurrentThread.Name, msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void writeLine(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            System.Diagnostics.Debug.Print(msg);
 | 
			
		||||
| 
						 | 
				
			
			@ -54,22 +67,11 @@ namespace AsterNET
 | 
			
		|||
        // Max 2 calls from  original caller !
 | 
			
		||||
        private string debugInfo()
 | 
			
		||||
        {
 | 
			
		||||
			System.Diagnostics.StackFrame sf = new System.Diagnostics.StackFrame(2, true);
 | 
			
		||||
			System.Reflection.MethodBase mb = sf.GetMethod();
 | 
			
		||||
            var sf = new StackFrame(2, true);
 | 
			
		||||
            MethodBase mb = sf.GetMethod();
 | 
			
		||||
            return string.Concat(mb.DeclaringType.Name, ":", mb.Name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Hashtable visibleDebug = new Hashtable();
 | 
			
		||||
		Hashtable visibleError = new Hashtable();
 | 
			
		||||
		Hashtable visibleInfo = new Hashtable();
 | 
			
		||||
		Hashtable visibleWarning = new Hashtable();
 | 
			
		||||
 | 
			
		||||
		private bool visibleDebugDef = true;
 | 
			
		||||
		private bool visibleErrorDef = true;
 | 
			
		||||
		private bool visibleInfoDef = true;
 | 
			
		||||
		private bool visibleWarningDef = true;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get visibility for message level of class:method
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -148,113 +150,134 @@ namespace AsterNET
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        #region Debug
 | 
			
		||||
 | 
			
		||||
        public void Debug(object o)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Debug, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Debug:", string.Concat(caller, " - ", o.ToString()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Debug(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Debug, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Debug:", string.Concat(caller, " - ", msg));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Debug(string format, params object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Debug, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Debug:", string.Concat(caller, " - ", string.Format(format, args)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Debug(string msg, Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Debug, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Debug:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Info
 | 
			
		||||
 | 
			
		||||
        public void Info(object o)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Info, caller.GetHashCode()))
 | 
			
		||||
                writeLine("   Info:", string.Concat(caller, " - ", o.ToString()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Info(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Info, caller.GetHashCode()))
 | 
			
		||||
                writeLine("   Info:", string.Concat(caller, " - ", msg));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Info(string format, params object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Info, caller.GetHashCode()))
 | 
			
		||||
                writeLine("   Info:", string.Concat(caller, " - ", string.Format(format, args)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Info(string msg, Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Info, caller.GetHashCode()))
 | 
			
		||||
                writeLine("   Info:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Warning
 | 
			
		||||
 | 
			
		||||
        public void Warning(object o)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Warning, caller.GetHashCode()))
 | 
			
		||||
                writeLine("Warning:", string.Concat(caller, " - ", o.ToString()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Warning(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Warning, caller.GetHashCode()))
 | 
			
		||||
                writeLine("Warning:", string.Concat(caller, " - ", msg));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Warning(string format, params object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Warning, caller.GetHashCode()))
 | 
			
		||||
                writeLine("Warning:", string.Concat(caller, " - ", string.Format(format, args)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Warning(string msg, Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Warning, caller.GetHashCode()))
 | 
			
		||||
                writeLine("Warning:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Error
 | 
			
		||||
 | 
			
		||||
        public void Error(object o)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Error, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Error:", string.Concat(caller, " - ", o.ToString()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Error(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Error, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Error:", string.Concat(caller, " - ", msg));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Error(string format, params object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Error, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Error:", string.Concat(caller, " - ", string.Format(format, args)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Error(string msg, Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            string caller = debugInfo();
 | 
			
		||||
            if (isVisible(MessageLevel.Error, caller.GetHashCode()))
 | 
			
		||||
                writeLine("  Error:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,4 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     This action lets you execute any AGI command through the Manager interface
 | 
			
		||||
| 
						 | 
				
			
			@ -12,17 +6,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgiAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
        public string Command { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get the name of this action, i.e. "AGI".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        override public string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "AGI"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty AgiAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +15,15 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            Command = command;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
        public string Command { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "AGI".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "AGI"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,28 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class AOCMessageAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _channel;
 | 
			
		||||
        private string _channelPrefix;
 | 
			
		||||
        private string _msgType;
 | 
			
		||||
        private string _chargeType;
 | 
			
		||||
        private int _unitAmount;
 | 
			
		||||
        private int _unitType;
 | 
			
		||||
        private string _currencyName;
 | 
			
		||||
        private string _currencyAmount;
 | 
			
		||||
        private string _currencyMultiplier;
 | 
			
		||||
        private string _totalType;
 | 
			
		||||
        private string _aocBillingId;
 | 
			
		||||
        private string _chargingAssociationId;
 | 
			
		||||
        private string _chargingAssociationNumber;
 | 
			
		||||
        private string _chargingrAssociationPlan;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Generate an Advice of Charge message on a channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -47,22 +26,25 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="chargingAssociationId"></param>
 | 
			
		||||
        /// <param name="chargingAssociationNumber"></param>
 | 
			
		||||
        /// <param name="chargingrAssociationPlan"></param>
 | 
			
		||||
        public AOCMessageAction(string channel, string channelPrefix, string msgType, string chargeType, int unitAmount, int unitType, string currencyName, string currencyAmount, string currencyMultiplier, string totalType, string aocBillingId, string chargingAssociationId, string chargingAssociationNumber, string chargingrAssociationPlan)
 | 
			
		||||
        public AOCMessageAction(string channel, string channelPrefix, string msgType, string chargeType, int unitAmount,
 | 
			
		||||
            int unitType, string currencyName, string currencyAmount, string currencyMultiplier, string totalType,
 | 
			
		||||
            string aocBillingId, string chargingAssociationId, string chargingAssociationNumber,
 | 
			
		||||
            string chargingrAssociationPlan)
 | 
			
		||||
        {
 | 
			
		||||
            _channel = channel;
 | 
			
		||||
            _channelPrefix = channelPrefix;
 | 
			
		||||
            _msgType = msgType;
 | 
			
		||||
            _chargeType = chargeType;
 | 
			
		||||
            _unitAmount = unitAmount;
 | 
			
		||||
            _unitType = unitType;
 | 
			
		||||
            _currencyName = currencyName;
 | 
			
		||||
            _currencyAmount = currencyAmount;
 | 
			
		||||
            _currencyMultiplier = currencyMultiplier;
 | 
			
		||||
            _totalType = totalType;
 | 
			
		||||
            _aocBillingId = aocBillingId;
 | 
			
		||||
            _chargingAssociationId = chargingAssociationId;
 | 
			
		||||
            _chargingAssociationNumber = chargingAssociationNumber;
 | 
			
		||||
            _chargingrAssociationPlan = chargingrAssociationPlan;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            ChannelPrefix = channelPrefix;
 | 
			
		||||
            MsgType = msgType;
 | 
			
		||||
            ChargeType = chargeType;
 | 
			
		||||
            UnitAmount = unitAmount;
 | 
			
		||||
            UnitType = unitType;
 | 
			
		||||
            CurrencyName = currencyName;
 | 
			
		||||
            CurrencyAmount = currencyAmount;
 | 
			
		||||
            CurrencyMultiplier = currencyMultiplier;
 | 
			
		||||
            TotalType = totalType;
 | 
			
		||||
            AocBillingId = aocBillingId;
 | 
			
		||||
            ChargingAssociationId = chargingAssociationId;
 | 
			
		||||
            ChargingAssociationNumber = chargingAssociationNumber;
 | 
			
		||||
            ChargingrAssociationPlan = chargingrAssociationPlan;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -70,88 +52,32 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "AOCMessage"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Channel
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channel; }
 | 
			
		||||
            set { _channel = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChannelPrefix
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channelPrefix; }
 | 
			
		||||
            set { _channelPrefix = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string ChannelPrefix { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string MsgType
 | 
			
		||||
        {
 | 
			
		||||
            get { return _msgType; }
 | 
			
		||||
            set { _msgType = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string MsgType { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChargeType
 | 
			
		||||
        {
 | 
			
		||||
            get { return _chargeType; }
 | 
			
		||||
            set { _chargeType = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string ChargeType { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int UnitAmount
 | 
			
		||||
        {
 | 
			
		||||
            get { return _unitAmount; }
 | 
			
		||||
            set { _unitAmount = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public int UnitAmount { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int UnitType
 | 
			
		||||
        {
 | 
			
		||||
            get { return _unitType; }
 | 
			
		||||
            set { _unitType = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public int UnitType { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string CurrencyName
 | 
			
		||||
        {
 | 
			
		||||
            get { return _currencyName; }
 | 
			
		||||
            set { _currencyName = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string CurrencyName { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string CurrencyAmount
 | 
			
		||||
        {
 | 
			
		||||
            get { return _currencyAmount; }
 | 
			
		||||
            set { _currencyAmount = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string CurrencyAmount { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string CurrencyMultiplier
 | 
			
		||||
        {
 | 
			
		||||
            get { return _currencyMultiplier; }
 | 
			
		||||
            set { _currencyMultiplier = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string CurrencyMultiplier { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string TotalType
 | 
			
		||||
        {
 | 
			
		||||
            get { return _totalType; }
 | 
			
		||||
            set { _totalType = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string TotalType { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string AocBillingId
 | 
			
		||||
        {
 | 
			
		||||
            get { return _aocBillingId; }
 | 
			
		||||
            set { _aocBillingId = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string AocBillingId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChargingAssociationId
 | 
			
		||||
        {
 | 
			
		||||
            get { return _chargingAssociationId; }
 | 
			
		||||
            set { _chargingAssociationId = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string ChargingAssociationId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChargingAssociationNumber
 | 
			
		||||
        {
 | 
			
		||||
            get { return _chargingAssociationNumber; }
 | 
			
		||||
            set { _chargingAssociationNumber = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string ChargingAssociationNumber { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChargingrAssociationPlan
 | 
			
		||||
        {
 | 
			
		||||
            get { return _chargingrAssociationPlan; }
 | 
			
		||||
            set { _chargingrAssociationPlan = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string ChargingrAssociationPlan { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +1,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     The AbsoluteTimeoutAction sets the absolute maximum amount of time permitted for a call on a given channel.<br />
 | 
			
		||||
	/// Note that the timeout is set from the current time forward, not counting the number of seconds the call has already been up.<br/>
 | 
			
		||||
    ///     Note that the timeout is set from the current time forward, not counting the number of seconds the call has already
 | 
			
		||||
    ///     been up.<br />
 | 
			
		||||
    ///     When setting a new timeout all previous absolute timeouts are cancelled.<br />
 | 
			
		||||
    ///     When the timeout is reached the call is returned to the T extension so that
 | 
			
		||||
    ///     you can playback an explanatory note to the calling party (the called party will not hear that).<br />
 | 
			
		||||
| 
						 | 
				
			
			@ -12,18 +11,19 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AbsoluteTimeoutAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private int timeout;
 | 
			
		||||
 | 
			
		||||
        #region AbsoluteTimeoutAction()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty AbsoluteTimeoutAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public AbsoluteTimeoutAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region AbsoluteTimeoutAction(channel, timeout)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AbsoluteTimeoutAction with the given channel and timeout.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -31,38 +31,40 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="timeout">the timeout in seconds or 0 to cancel the AbsoluteTimeout</param>
 | 
			
		||||
        public AbsoluteTimeoutAction(string channel, int timeout)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.timeout = timeout;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            Timeout = timeout;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "AbsoluteTimeout".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "AbsoluteTimeout"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
		/// Get/Set the name of the channel.</summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        ///     Get/Set the name of the channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Timeout
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the timeout (in seconds) to set.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public int Timeout
 | 
			
		||||
		{
 | 
			
		||||
			get { return timeout; }
 | 
			
		||||
			set { this.timeout = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public int Timeout { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -13,65 +11,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentCallbackLoginAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string exten;
 | 
			
		||||
		private string context;
 | 
			
		||||
		private bool ackCall;
 | 
			
		||||
		private long wrapupTime;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "AgentCallbackLogin".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "AgentCallbackLogin"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the agent to log in, for example "1002".<br/>
 | 
			
		||||
		/// This is property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.agent; }
 | 
			
		||||
			set { this.agent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the extension to use for callback.<br/>
 | 
			
		||||
		/// This is property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Exten
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.exten; }
 | 
			
		||||
			set { this.exten = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the context of the extension to use for callback.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Context
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.context; }
 | 
			
		||||
			set { this.context = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set if an acknowledgement is needed when agent is called back.<br/>
 | 
			
		||||
		/// <code>true</code> if acknowledgement by '#' is required when agent is called back, <code>false</code> otherwise.
 | 
			
		||||
		/// This property is optional, it allows you to override the defaults defined in Asterisk's configuration.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool AckCall
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.ackCall; }
 | 
			
		||||
			set { this.ackCall = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Returns the minimum amount of time (in milliseconds) after disconnecting before the caller can receive a new call.<br/>
 | 
			
		||||
		/// This property is optional, it allows you to override the defaults defined in Asterisk's configuration.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public long WrapupTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.wrapupTime; }
 | 
			
		||||
			set { this.wrapupTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty AgentCallbackLoginAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -87,8 +26,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="exten">the extension that is called to connect a queue member with this agent</param>
 | 
			
		||||
        public AgentCallbackLoginAction(string agent, string exten)
 | 
			
		||||
        {
 | 
			
		||||
			this.agent = agent;
 | 
			
		||||
			this.exten = exten;
 | 
			
		||||
            Agent = agent;
 | 
			
		||||
            Exten = exten;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +40,46 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public AgentCallbackLoginAction(string agent, string exten, string context)
 | 
			
		||||
            : this(agent, exten)
 | 
			
		||||
        {
 | 
			
		||||
			this.context = context;
 | 
			
		||||
		}
 | 
			
		||||
            Context = context;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "AgentCallbackLogin".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "AgentCallbackLogin"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the agent to log in, for example "1002".<br />
 | 
			
		||||
        ///     This is property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the extension to use for callback.<br />
 | 
			
		||||
        ///     This is property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the context of the extension to use for callback.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set if an acknowledgement is needed when agent is called back.<br />
 | 
			
		||||
        ///     <code>true</code> if acknowledgement by '#' is required when agent is called back, <code>false</code> otherwise.
 | 
			
		||||
        ///     This property is optional, it allows you to override the defaults defined in Asterisk's configuration.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool AckCall { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the minimum amount of time (in milliseconds) after disconnecting before the caller can receive a new call.
 | 
			
		||||
        ///     <br />
 | 
			
		||||
        ///     This property is optional, it allows you to override the defaults defined in Asterisk's configuration.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long WrapupTime { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,78 +5,68 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentLogoffAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private bool soft;
 | 
			
		||||
 | 
			
		||||
        #region Action 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of this action, i.e. "AgentLogoff".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the name of this action</returns>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return "AgentLogoff";
 | 
			
		||||
			}
 | 
			
		||||
            get { return "AgentLogoff"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Agent 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of the agent to log off, for example "1002".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>the name of the agent to log off</returns>
 | 
			
		||||
		/// <summary> Sets the name of the agent to log off, for example "1002".<br/>
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Sets the name of the agent to log off, for example "1002".<br />
 | 
			
		||||
        ///     This is property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agent">the name of the agent to log off</param>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return agent;
 | 
			
		||||
			}
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.agent = value;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Soft 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set whether to hangup existing calls or not.<br />
 | 
			
		||||
        ///     Default is to hangup existing calls on logoff.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		/// <returns> true if existing calls should not be hung up, false otherwise.<br/>
 | 
			
		||||
        /// <returns>
 | 
			
		||||
        ///     true if existing calls should not be hung up, false otherwise.<br />
 | 
			
		||||
        ///     <code>null</code> if default should be used.
 | 
			
		||||
        /// </returns>
 | 
			
		||||
		public bool Soft
 | 
			
		||||
		{
 | 
			
		||||
			get { return soft; }
 | 
			
		||||
			set { this.soft = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public bool Soft { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructors - AgentLogoffAction() 
 | 
			
		||||
 | 
			
		||||
        /// <summary> Creates a new empty AgentLogoffAction.</summary>
 | 
			
		||||
        public AgentLogoffAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AgentLogoffAction that logs off the given agent
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agent">the name of the agent to log off.</param>
 | 
			
		||||
        public AgentLogoffAction(string agent)
 | 
			
		||||
        {
 | 
			
		||||
			this.agent = agent;
 | 
			
		||||
            Agent = agent;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructors - AgentLogoffAction(string agent, bool soft) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AgentLogoffAction that logs off the given agent
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -87,8 +75,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public AgentLogoffAction(string agent, bool soft)
 | 
			
		||||
            : this(agent)
 | 
			
		||||
        {
 | 
			
		||||
			this.soft = soft;
 | 
			
		||||
            Soft = soft;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -13,29 +14,28 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    public class AgentsAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
        #region Action 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Agents".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Agents"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ActionCompleteEventClass 
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.AgentsCompleteEvent);
 | 
			
		||||
            return typeof (AgentsCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region AgentsAction() 
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new AgentsAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public AgentsAction()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class AtxferAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _channel;
 | 
			
		||||
        private string _exten;
 | 
			
		||||
        private string _context;
 | 
			
		||||
        private string _priority;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Attended transfer.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -29,10 +18,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="priority">Priority to transfer to.</param>
 | 
			
		||||
        public AtxferAction(string channel, string exten, string context, string priority)
 | 
			
		||||
        {
 | 
			
		||||
            _channel = channel;
 | 
			
		||||
            _exten = exten;
 | 
			
		||||
            _context = context;
 | 
			
		||||
            _priority = priority;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            Exten = exten;
 | 
			
		||||
            Context = context;
 | 
			
		||||
            Priority = priority;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -43,37 +32,21 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        ///     Transferer's channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channel; }
 | 
			
		||||
            set { _channel = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Extension to transfer to.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Exten
 | 
			
		||||
        {
 | 
			
		||||
            get { return _exten; }
 | 
			
		||||
            set { _exten = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Context to transfer to.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Context
 | 
			
		||||
        {
 | 
			
		||||
            get { return _context; }
 | 
			
		||||
            set { _context = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Priority to transfer to.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Priority
 | 
			
		||||
        {
 | 
			
		||||
            get { return _priority; }
 | 
			
		||||
            set { _priority = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Priority { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class BridgeAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _channel1;
 | 
			
		||||
        private string _channel2;
 | 
			
		||||
        private string _tone;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Bridge two channels already in the PBX.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,9 +17,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="tone">Play courtesy tone to Channel 2 [yes|no]</param>
 | 
			
		||||
        public BridgeAction(string channel1, string channel2, string tone)
 | 
			
		||||
        {
 | 
			
		||||
            _channel1 = channel1;
 | 
			
		||||
            _channel2 = channel2;
 | 
			
		||||
            _tone = tone;
 | 
			
		||||
            Channel1 = channel1;
 | 
			
		||||
            Channel2 = channel2;
 | 
			
		||||
            Tone = tone;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -37,22 +27,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "Bridge"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Channel1
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channel1; }
 | 
			
		||||
            set { _channel1 = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Channel1 { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Channel2
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channel2; }
 | 
			
		||||
            set { _channel2 = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Channel2 { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Tone
 | 
			
		||||
        {
 | 
			
		||||
            get { return _tone; }
 | 
			
		||||
            set { _tone = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Tone { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,30 +9,12 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.Response.ChallengeResponse" />
 | 
			
		||||
    public class ChallengeAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string authType;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "Challenge".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "Challenge"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the digest alogrithm to use. Currently asterisk only supports "MD5".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string AuthType
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.authType; }
 | 
			
		||||
			set { this.authType = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty ChallengeAction with MD5 algorithm
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ChallengeAction()
 | 
			
		||||
        {
 | 
			
		||||
			this.authType = "MD5";
 | 
			
		||||
            AuthType = "MD5";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +24,20 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="authType">the digest alogrithm to use.</param>
 | 
			
		||||
        public ChallengeAction(string authType)
 | 
			
		||||
        {
 | 
			
		||||
			this.authType = authType;
 | 
			
		||||
		}
 | 
			
		||||
            AuthType = authType;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Challenge".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Challenge"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the digest alogrithm to use. Currently asterisk only supports "MD5".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string AuthType { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,50 +7,51 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ChangeMonitorAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string file;
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ChangeMonitor".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ChangeMonitor"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the monitored channel.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region File
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the file to which the voice data is written.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string File
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.file; }
 | 
			
		||||
			set { this.file = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string File { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ChangeMonitorAction()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty ChangeMonitorAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ChangeMonitorAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ChangeMonitorAction(string channel, string file)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new ChangeMonitorAction that causes monitoring data for the
 | 
			
		||||
        ///     given channel to be written to the given file(s).
 | 
			
		||||
| 
						 | 
				
			
			@ -61,9 +60,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="file">the (base) name of the file(s) to which the voice data is written</param>
 | 
			
		||||
        public ChangeMonitorAction(string channel, string file)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.file = file;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            File = file;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -10,22 +8,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    {
 | 
			
		||||
        protected internal string command;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "Command".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "Command"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the CLI command to send to the asterisk server.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Command
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.command; }
 | 
			
		||||
			set { this.command = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new CommandAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -41,5 +23,22 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            this.command = command;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Command".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Command"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the CLI command to send to the asterisk server.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Command
 | 
			
		||||
        {
 | 
			
		||||
            get { return command; }
 | 
			
		||||
            set { command = value; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeKickAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeKick"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Removes a specified user from a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeKickAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Removes a specified user from a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +16,16 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="channel"></param>
 | 
			
		||||
        public ConfbridgeKickAction(string conference, string channel)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeKick"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +1,8 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
        https://wiki.asterisk.org/wiki/display/AST/ConfBridge+10#ConfBridge10-ConfBridgeAsteriskManagerInterface%28AMI%29Events
 | 
			
		||||
        Action: ConfbridgeList
 | 
			
		||||
| 
						 | 
				
			
			@ -19,17 +15,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ConfbridgeListAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeList"; }
 | 
			
		||||
		}
 | 
			
		||||
		public override Type ActionCompleteEventClass()
 | 
			
		||||
		{
 | 
			
		||||
			return typeof(Event.ConfbridgeListCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Lists all users in a particular ConfBridge conference. ConfbridgeList will follow as separate events,
 | 
			
		||||
        ///     followed by a final event called ConfbridgeListComplete
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +22,19 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeListAction(string conference)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeList"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
            return typeof (ConfbridgeListCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,34 +1,22 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     Lists data about all active conferences. ConfbridgeListRooms will follow as separate events,
 | 
			
		||||
    ///     followed by a final event called ConfbridgeListRoomsComplete.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class ConfbridgeListRoomsAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeListRooms"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.ConfbridgeListRoomsCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
        /// Lists data about all active conferences. ConfbridgeListRooms will follow as separate events, 
 | 
			
		||||
        /// followed by a final event called ConfbridgeListRoomsComplete.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
        public ConfbridgeListRoomsAction()
 | 
			
		||||
		{
 | 
			
		||||
            return typeof (ConfbridgeListRoomsCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeLockAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeLock"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Locks a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeLockAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Locks a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +15,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeLockAction(string conference)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeLock"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeMuteAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeMute"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Mutes a specified user in a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeMuteAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Mutes a specified user in a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +16,16 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="channel"></param>
 | 
			
		||||
        public ConfbridgeMuteAction(string conference, string channel)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeMute"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeSetSingleVideoSrcAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeSetSingleVideoSrc"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Stops recording a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeSetSingleVideoSrcAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Stops recording a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -28,8 +15,16 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeSetSingleVideoSrcAction(string conference, string channel)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeSetSingleVideoSrc"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeStartRecordAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeStartRecord"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Starts recording a specified conference, with an optional filename.
 | 
			
		||||
        ///     If recording is already in progress, an error will be returned.
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +9,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        ///     If record_file is not specified, a file will automatically be generated in Asterisk's monitor directory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeStartRecordAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Starts recording a specified conference, with an optional filename.
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +21,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeStartRecordAction(string conference)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeStartRecord"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeStopRecordAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeStopRecord"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Stops recording a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeStopRecordAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Stops recording a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +15,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeStopRecordAction(string conference)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeStopRecord"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,25 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeUnlockAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeUnlock"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Unlocks a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeUnlockAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Unlocks a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +15,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="conference"></param>
 | 
			
		||||
        public ConfbridgeUnlockAction(string conference)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeUnlock"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class ConfbridgeUnmuteAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
		{
 | 
			
		||||
            get { return "ConfbridgeUnmute"; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Unmutes a specified user in a specified conference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ConfbridgeUnmuteAction()
 | 
			
		||||
        { }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Unmutes a specified user in a specified conference.
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +16,16 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="channel"></param>
 | 
			
		||||
        public ConfbridgeUnmuteAction(string conference, string channel)
 | 
			
		||||
        {
 | 
			
		||||
            this.Conference = conference;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            Conference = conference;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Conference { get; set; }
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ConfbridgeUnmute"; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class CoreSettingsAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Show PBX core settings (version etc).
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CoreSettingsAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "CoreSettings"; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class CoreShowChannelsAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// List currently defined channels and some information about them.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CoreShowChannelsAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "CoreShowChannels"; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class CoreStatusAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Show PBX core status variables. Query for Core PBX status.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CoreStatusAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "CoreStatus"; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,11 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class CreateConfigAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _filename;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates an empty file in the configuration directory.
 | 
			
		||||
        /// This action will create an empty file in the configuration directory. This action is intended to be used before an UpdateConfig action.
 | 
			
		||||
        ///     This action will create an empty file in the configuration directory. This action is intended to be used before an
 | 
			
		||||
        ///     UpdateConfig action.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CreateConfigAction()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -20,12 +13,13 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates an empty file in the configuration directory.
 | 
			
		||||
        /// This action will create an empty file in the configuration directory. This action is intended to be used before an UpdateConfig action.
 | 
			
		||||
        ///     This action will create an empty file in the configuration directory. This action is intended to be used before an
 | 
			
		||||
        ///     UpdateConfig action.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="filename"></param>
 | 
			
		||||
        public CreateConfigAction(string filename)
 | 
			
		||||
        {
 | 
			
		||||
            _filename = filename;
 | 
			
		||||
            Filename = filename;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -33,10 +27,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "CreateConfig"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Filename
 | 
			
		||||
        {
 | 
			
		||||
            get { return _filename; }
 | 
			
		||||
            set { _filename = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Filename { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,37 +1,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class DBDelAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        private string family;
 | 
			
		||||
        private string key;
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBDel"; }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get/Set the the Family of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Family
 | 
			
		||||
        {
 | 
			
		||||
            get { return family; }
 | 
			
		||||
            set { this.family = value; }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get/Set the the key of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key
 | 
			
		||||
        {
 | 
			
		||||
            get { return key; }
 | 
			
		||||
            set { this.key = value; }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty DBDelAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -47,8 +19,23 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="key">the key of the entry to retrieve</param>
 | 
			
		||||
        public DBDelAction(string family, string key)
 | 
			
		||||
        {
 | 
			
		||||
            this.family = family;
 | 
			
		||||
            this.key = key;
 | 
			
		||||
        }
 | 
			
		||||
            Family = family;
 | 
			
		||||
            Key = key;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBDel"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the Family of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Family { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the key of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,37 +1,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class DBDelTreeAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        private string family;
 | 
			
		||||
        private string key;
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBDelTree"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get/Set the the Family of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Family
 | 
			
		||||
        {
 | 
			
		||||
            get { return family; }
 | 
			
		||||
            set { this.family = value; }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get/Set the the key of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key
 | 
			
		||||
        {
 | 
			
		||||
            get { return key; }
 | 
			
		||||
            set { this.key = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty DBDelTreeAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -47,8 +19,23 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="key">the key of the entry to retrieve</param>
 | 
			
		||||
        public DBDelTreeAction(string family, string key)
 | 
			
		||||
        {
 | 
			
		||||
            this.family = family;
 | 
			
		||||
            this.key = key;
 | 
			
		||||
        }
 | 
			
		||||
            Family = family;
 | 
			
		||||
            Key = key;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBDelTree"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the Family of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Family { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the key of the entry to delete.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,8 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     Retrieves an entry in the Asterisk database for a given family and key.<br />
 | 
			
		||||
    ///     If an entry is found a DBGetResponseEvent is sent by Asterisk containing the
 | 
			
		||||
| 
						 | 
				
			
			@ -10,41 +11,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="AsterNET.Manager.Event.DBGetResponseEvent" />
 | 
			
		||||
    public class DBGetAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string family;
 | 
			
		||||
		private string key;
 | 
			
		||||
 | 
			
		||||
		public override string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "DBGet"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary> Returns the family of the key.
 | 
			
		||||
		/// 
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <returns> the family of the key.
 | 
			
		||||
		/// </returns>
 | 
			
		||||
		/// <summary> Sets the family of the key.
 | 
			
		||||
		/// 
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="family">the family of the key.
 | 
			
		||||
		/// </param>
 | 
			
		||||
		public string Family
 | 
			
		||||
		{
 | 
			
		||||
			get { return family; }
 | 
			
		||||
			set { this.family = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the the key of the entry to retrieve.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Key
 | 
			
		||||
		{
 | 
			
		||||
			get { return key; }
 | 
			
		||||
			set { this.key = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public override Type ActionCompleteEventClass()
 | 
			
		||||
		{
 | 
			
		||||
			return typeof(Event.DBGetResponseEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty DBGetAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,8 +26,34 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="key">the key of the entry to retrieve</param>
 | 
			
		||||
        public DBGetAction(string family, string key)
 | 
			
		||||
        {
 | 
			
		||||
			this.family = family;
 | 
			
		||||
			this.key = key;
 | 
			
		||||
            Family = family;
 | 
			
		||||
            Key = key;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBGet"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the family of the key.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>
 | 
			
		||||
        ///     the family of the key.
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        /// <param name="family">
 | 
			
		||||
        ///     the family of the key.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public string Family { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the key of the entry to retrieve.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
            return typeof (DBGetResponseEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,39 +6,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class DBPutAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string family;
 | 
			
		||||
		private string key;
 | 
			
		||||
		private string val;
 | 
			
		||||
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "DBPut"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the family of the key to set.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Family
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.family; }
 | 
			
		||||
			set { this.family = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the the key to set.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Key
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.key; }
 | 
			
		||||
			set { this.key = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the value to set.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Val
 | 
			
		||||
		{
 | 
			
		||||
			get { return val; }
 | 
			
		||||
			set { this.val = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty DBPutAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -56,9 +21,29 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="val">the value to set</param>
 | 
			
		||||
        public DBPutAction(string family, string key, string val)
 | 
			
		||||
        {
 | 
			
		||||
			this.family = family;
 | 
			
		||||
			this.key = key;
 | 
			
		||||
			this.val = val;
 | 
			
		||||
		}
 | 
			
		||||
            Family = family;
 | 
			
		||||
            Key = key;
 | 
			
		||||
            Val = val;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "DBPut"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the family of the key to set.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Family { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the the key to set.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the value to set.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Val { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,27 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class EventsAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string eventMask;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "Events".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "Events"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the event mask.<br/>
 | 
			
		||||
		/// Set to "on" if all events should be send, "off" if not events should be
 | 
			
		||||
		/// sent or a combination of "system", "call" and "log" (separated by ',') to
 | 
			
		||||
		/// specify what kind of events should be sent.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string EventMask
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.eventMask; }
 | 
			
		||||
			set { this.eventMask = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty EventsAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -38,13 +15,30 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        ///     Creates a new EventsAction that applies the given event mask to the current manager connection.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		/// <param name="eventMask">the event mask.<br/>
 | 
			
		||||
        /// <param name="eventMask">
 | 
			
		||||
        ///     the event mask.<br />
 | 
			
		||||
        ///     Set to "on" if all events should be send, "off" if not events should be sent
 | 
			
		||||
        ///     or a combination of "system", "call" and "log" (separated by ',') to specify what kind of events should be sent.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public EventsAction(string eventMask)
 | 
			
		||||
        {
 | 
			
		||||
			this.eventMask = eventMask;
 | 
			
		||||
		}
 | 
			
		||||
            EventMask = eventMask;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Events".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Events"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the event mask.<br />
 | 
			
		||||
        ///     Set to "on" if all events should be send, "off" if not events should be
 | 
			
		||||
        ///     sent or a combination of "system", "call" and "log" (separated by ',') to
 | 
			
		||||
        ///     specify what kind of events should be sent.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string EventMask { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,37 +5,34 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ExtensionStateAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string exten;
 | 
			
		||||
		private string context;
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ExtensionState".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ExtensionState"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Exten
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the extension to query.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Exten
 | 
			
		||||
		{
 | 
			
		||||
			get { return exten; }
 | 
			
		||||
			set { this.exten = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Context
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the context that contains the extension to query.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Context
 | 
			
		||||
		{
 | 
			
		||||
			get { return context; }
 | 
			
		||||
			set { this.context = value; }
 | 
			
		||||
		}		
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using AsterNET.Manager.Response;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
| 
						 | 
				
			
			@ -10,8 +7,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class GetConfigAction : ManagerActionResponse
 | 
			
		||||
    {
 | 
			
		||||
		private string filename;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new GetConfigAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +14,15 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="filename">the configuration filename.</param>
 | 
			
		||||
        public GetConfigAction(string filename)
 | 
			
		||||
        {
 | 
			
		||||
            Filename = filename;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,24 +31,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "GetConfig"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="filename">the configuration filename.</param>
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public GetConfigAction(string filename)
 | 
			
		||||
		{
 | 
			
		||||
			this.filename = filename;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the configuration filename.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Filename
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.filename; }
 | 
			
		||||
			set { this.filename = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Filename { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override object ActionCompleteResponseClass()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,9 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class GetVarAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string varName;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty GetVarAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +18,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="variable">the name of the global variable to query.</param>
 | 
			
		||||
        public GetVarAction(string variable)
 | 
			
		||||
        {
 | 
			
		||||
			this.varName = variable;
 | 
			
		||||
            Variable = variable;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -33,33 +28,27 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="variable">the name of the variable to query.</param>
 | 
			
		||||
        public GetVarAction(string channel, string variable)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.varName = variable;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            Variable = variable;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "GetVar".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "GetVar"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel, if you query for a local channel variable.
 | 
			
		||||
        ///     Leave empty to query for a global variable.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the variable to query.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Variable
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.varName; }
 | 
			
		||||
			set { this.varName = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Variable { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,8 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class HangupAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty HangupAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,23 +18,20 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="channel">the name of the channel to hangup.</param>
 | 
			
		||||
        public HangupAction(string channel)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Hangup".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Hangup"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel to hangup.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,12 +1,6 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    class ListCommandsAction
 | 
			
		||||
    internal class ListCommandsAction
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -14,66 +12,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.Response.ManagerError" />
 | 
			
		||||
    public class LoginAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string username;
 | 
			
		||||
		private string secret;
 | 
			
		||||
		private string authType;
 | 
			
		||||
		private string key;
 | 
			
		||||
		private string events;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "Login".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "Login"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the username as configured in asterik's <code>manager.conf</code>.</summary>
 | 
			
		||||
		public string Username
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.username; }
 | 
			
		||||
			set { this.username = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the secret to use when using cleartext login.<br/>
 | 
			
		||||
		/// The secret contains the user's password as configured in Asterisk's <code>manager.conf</code>.<br/>
 | 
			
		||||
		/// The secret and key properties are mutually exclusive.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Secret
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.secret; }
 | 
			
		||||
			set { this.secret = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the digest alogrithm when using challenge/response.<br/>
 | 
			
		||||
		/// The digest algorithm is used to create the key based on the challenge and
 | 
			
		||||
		/// the user's password.<br/>
 | 
			
		||||
		/// Currently Asterisk supports only "MD5".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string AuthType
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.authType; }
 | 
			
		||||
			set { this.authType = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the key.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Key
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.key; }
 | 
			
		||||
			set { this.key = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the event mask.<br/>
 | 
			
		||||
		/// Set to "on" if all events should be send, "off" if not events should be sent or a combination of
 | 
			
		||||
		/// "system", "call" and "log" (separated by ',') to specify what kind of events should be sent.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Events
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.events; }
 | 
			
		||||
			set { this.events = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty LoginAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -90,39 +28,86 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <seealso cref="Manager.Action.ChallengeAction" />
 | 
			
		||||
        public LoginAction(string username, string secret)
 | 
			
		||||
        {
 | 
			
		||||
			this.username = username;
 | 
			
		||||
			this.secret = secret;
 | 
			
		||||
            Username = username;
 | 
			
		||||
            Secret = secret;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new LoginAction that performs a login via challenge/response.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="username">the username as configured in Asterisk's <code>manager.conf</code></param>
 | 
			
		||||
		/// <param name="authType">the digest alogrithm, must match the digest algorithm that was used with the corresponding ChallengeAction.</param>
 | 
			
		||||
        /// <param name="authType">
 | 
			
		||||
        ///     the digest alogrithm, must match the digest algorithm that was used with the corresponding
 | 
			
		||||
        ///     ChallengeAction.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        /// <param name="key">the hash of the user's password and the challenge</param>
 | 
			
		||||
        public LoginAction(string username, string authType, string key)
 | 
			
		||||
        {
 | 
			
		||||
			this.username = username;
 | 
			
		||||
			this.authType = authType;
 | 
			
		||||
			this.key = key;
 | 
			
		||||
            Username = username;
 | 
			
		||||
            AuthType = authType;
 | 
			
		||||
            Key = key;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new LoginAction that performs a login via challenge/response.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="username">the username as configured in Asterisk's <code>manager.conf</code></param>
 | 
			
		||||
		/// <param name="authType">the digest alogrithm, must match the digest algorithm that was used with the corresponding ChallengeAction.</param>
 | 
			
		||||
        /// <param name="authType">
 | 
			
		||||
        ///     the digest alogrithm, must match the digest algorithm that was used with the corresponding
 | 
			
		||||
        ///     ChallengeAction.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        /// <param name="key">the hash of the user's password and the challenge</param>
 | 
			
		||||
		/// <param name="events">the event mask.<br/>
 | 
			
		||||
        /// <param name="events">
 | 
			
		||||
        ///     the event mask.<br />
 | 
			
		||||
        ///     Set to "on" if all events should be send, "off" if not events should be sent
 | 
			
		||||
        ///     or a combination of "system", "call" and "log" (separated by ',') to specify what kind of events should be sent.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public LoginAction(string username, string authType, string key, string events)
 | 
			
		||||
        {
 | 
			
		||||
			this.username = username;
 | 
			
		||||
			this.authType = authType;
 | 
			
		||||
			this.key = key;
 | 
			
		||||
			this.events = events;
 | 
			
		||||
		}
 | 
			
		||||
            Username = username;
 | 
			
		||||
            AuthType = authType;
 | 
			
		||||
            Key = key;
 | 
			
		||||
            Events = events;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Login".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Login"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the username as configured in asterik's <code>manager.conf</code>.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Username { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the secret to use when using cleartext login.<br />
 | 
			
		||||
        ///     The secret contains the user's password as configured in Asterisk's <code>manager.conf</code>.<br />
 | 
			
		||||
        ///     The secret and key properties are mutually exclusive.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Secret { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the digest alogrithm when using challenge/response.<br />
 | 
			
		||||
        ///     The digest algorithm is used to create the key based on the challenge and
 | 
			
		||||
        ///     the user's password.<br />
 | 
			
		||||
        ///     Currently Asterisk supports only "MD5".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string AuthType { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the key.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Key { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the event mask.<br />
 | 
			
		||||
        ///     Set to "on" if all events should be send, "off" if not events should be sent or a combination of
 | 
			
		||||
        ///     "system", "call" and "log" (separated by ',') to specify what kind of events should be sent.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Events { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -10,16 +8,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Logoff".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Logoff"; }
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new LogoffAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public LogoffAction()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,27 +7,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.Response.MailboxCountResponse" />
 | 
			
		||||
    public class MailboxCountAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string mailbox;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "MailboxCount".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "MailboxCount"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the mailbox to query.<br/>
 | 
			
		||||
		/// This can either be only the number of the mailbox or a string of the form
 | 
			
		||||
		/// mailboxnumber@context.If no context is specified "default" is assumed.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Mailbox
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.mailbox; }
 | 
			
		||||
			set { this.mailbox = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty MailboxCountAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -41,14 +18,31 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        ///     Creates a new MailboxCountAction that queries the number of unread and
 | 
			
		||||
        ///     read messages in the given mailbox.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		/// <param name="mailbox">the name of the mailbox to query.<br/>
 | 
			
		||||
        /// <param name="mailbox">
 | 
			
		||||
        ///     the name of the mailbox to query.<br />
 | 
			
		||||
        ///     This can either be only the number of the mailbox or a string
 | 
			
		||||
        ///     of the form mailboxnumber@context.If no context is specified
 | 
			
		||||
        ///     "default" is assumed.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public MailboxCountAction(string mailbox)
 | 
			
		||||
        {
 | 
			
		||||
			this.mailbox = mailbox;
 | 
			
		||||
		}
 | 
			
		||||
            Mailbox = mailbox;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "MailboxCount".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "MailboxCount"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the mailbox to query.<br />
 | 
			
		||||
        ///     This can either be only the number of the mailbox or a string of the form
 | 
			
		||||
        ///     mailboxnumber@context.If no context is specified "default" is assumed.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Mailbox { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,31 +7,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.Response.MailboxStatusResponse" />
 | 
			
		||||
    public class MailboxStatusAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string mailbox;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "MailboxStatus".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "MailboxStatus"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the mailbox to query.<br/>
 | 
			
		||||
		/// This can either be only the name of the mailbox or a string of the form
 | 
			
		||||
		/// mailboxnumber@context. If no context is specified "default" is assumed.<br/>
 | 
			
		||||
		/// Multiple mailboxes may be given, separated by ','. In this case the
 | 
			
		||||
		/// action checks whether at least one of the given mailboxes has waiting
 | 
			
		||||
		/// messages.<br/>
 | 
			
		||||
		/// This property is mandatory.<br/>
 | 
			
		||||
		/// Example: "1234,1235@mycontext"
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Mailbox
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.mailbox; }
 | 
			
		||||
			set { this.mailbox = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty MailboxStatusAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -44,14 +17,35 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        ///     Creates a new MailboxStatusAction that checks for waiting messages in the given mailbox.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		/// <param name="mailbox">the name of the mailbox to check.<br/>
 | 
			
		||||
        /// <param name="mailbox">
 | 
			
		||||
        ///     the name of the mailbox to check.<br />
 | 
			
		||||
        ///     This can either be only the number of the mailbox or a string
 | 
			
		||||
        ///     of the form mailboxnumber@context.If no context is specified
 | 
			
		||||
        ///     "default" is assumed.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public MailboxStatusAction(string mailbox)
 | 
			
		||||
        {
 | 
			
		||||
			this.mailbox = mailbox;
 | 
			
		||||
		}
 | 
			
		||||
            Mailbox = mailbox;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "MailboxStatus".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "MailboxStatus"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the mailbox to query.<br />
 | 
			
		||||
        ///     This can either be only the name of the mailbox or a string of the form
 | 
			
		||||
        ///     mailboxnumber@context. If no context is specified "default" is assumed.<br />
 | 
			
		||||
        ///     Multiple mailboxes may be given, separated by ','. In this case the
 | 
			
		||||
        ///     action checks whether at least one of the given mailboxes has waiting
 | 
			
		||||
        ///     messages.<br />
 | 
			
		||||
        ///     This property is mandatory.<br />
 | 
			
		||||
        ///     Example: "1234,1235@mycontext"
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Mailbox { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,3 @@
 | 
			
		|||
using System.Text;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -10,26 +7,26 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    public abstract class ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        private string actionId;
 | 
			
		||||
		private string server;
 | 
			
		||||
        private string proxyKey;
 | 
			
		||||
        private string server;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Manager API Action key. Also use as ProxyAction key to <see cref="ProxyAction">ProxyAction</see> actions.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public abstract string Action
 | 
			
		||||
		{
 | 
			
		||||
			get;
 | 
			
		||||
		}
 | 
			
		||||
        public abstract string Action { get; }
 | 
			
		||||
 | 
			
		||||
        #region ActionId 
 | 
			
		||||
 | 
			
		||||
        public string ActionId
 | 
			
		||||
        {
 | 
			
		||||
            get { return this.actionId; }
 | 
			
		||||
            set { this.actionId = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Server 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Specify a server to which to send your commands (x.x.x.x or hostname).<br />
 | 
			
		||||
        ///     This should match the server name specified in your config file's "host" entry.
 | 
			
		||||
| 
						 | 
				
			
			@ -40,9 +37,11 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return this.server; }
 | 
			
		||||
            set { this.server = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ProxyKey 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     You can use this as a simple authentication mechanism.<br />
 | 
			
		||||
        ///     Rather than have to login with a username & password,
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +55,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return this.proxyKey; }
 | 
			
		||||
            set { this.proxyKey = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Response;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,78 +6,70 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class MonitorAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string file;
 | 
			
		||||
		private string format;
 | 
			
		||||
		private bool mix;
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Monitor".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Monitor"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel to monitor.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region File
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the file to which the voice data is written.<br />
 | 
			
		||||
        ///     If this property is not set it defaults to to the channel name as per CLI with the '/' replaced by '-'.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string File
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.file; }
 | 
			
		||||
			set { this.file = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string File { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Format
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the format to use for encoding the voice files.<br />
 | 
			
		||||
        ///     If this property is not set it defaults to "wav".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Format
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.format; }
 | 
			
		||||
			set { this.format = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Format { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Mix
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns true if the two voice files should be joined at the end of the call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public bool Mix
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.mix; }
 | 
			
		||||
			set { this.mix = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public bool Mix { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region MonitorAction()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty MonitorAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public MonitorAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region MonitorAction(string channel, string file)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new MonitorAction that starts monitoring the given channel and
 | 
			
		||||
        ///     writes voice data to the given file(s).
 | 
			
		||||
| 
						 | 
				
			
			@ -88,12 +78,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="file">the (base) name of the file(s) to which the voice data is written</param>
 | 
			
		||||
        public MonitorAction(string channel, string file)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.file = file;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            File = file;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region MonitorAction(string channel, string file)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new MonitorAction that starts monitoring the given channel and
 | 
			
		||||
        ///     writes voice data to the given file(s).
 | 
			
		||||
| 
						 | 
				
			
			@ -103,13 +95,15 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="format">the format to use for encoding the voice files</param>
 | 
			
		||||
        public MonitorAction(string channel, string file, string format)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.file = file;
 | 
			
		||||
			this.format = format;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            File = file;
 | 
			
		||||
            Format = format;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region MonitorAction(string channel, string file, string format, int mix)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new MonitorAction that starts monitoring the given channel and
 | 
			
		||||
        ///     writes voice data to the given file(s).
 | 
			
		||||
| 
						 | 
				
			
			@ -120,11 +114,12 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="mix">true if the two voice files should be joined at the end of the call</param>
 | 
			
		||||
        public MonitorAction(string channel, string file, string format, bool mix)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.file = file;
 | 
			
		||||
			this.format = format;
 | 
			
		||||
			this.mix = mix;
 | 
			
		||||
            Channel = channel;
 | 
			
		||||
            File = file;
 | 
			
		||||
            Format = format;
 | 
			
		||||
            Mix = mix;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -24,158 +24,134 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="AsterNET.Manager.Event.OriginateFailureEvent" />
 | 
			
		||||
    public class OriginateAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string exten;
 | 
			
		||||
		private string context;
 | 
			
		||||
		private string priority;
 | 
			
		||||
		private int timeout;
 | 
			
		||||
		private string callerId;
 | 
			
		||||
        private Dictionary<string, string> variables;
 | 
			
		||||
		private string account;
 | 
			
		||||
		private string application;
 | 
			
		||||
		private string data;
 | 
			
		||||
		private bool async;
 | 
			
		||||
 | 
			
		||||
        #region Action 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Originate".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Originate"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Account 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the account code to use for the originated call.
 | 
			
		||||
        ///     The account code is included in the call detail record generated for this call and will be used for billing.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Account
 | 
			
		||||
		{
 | 
			
		||||
			get { return account; }
 | 
			
		||||
			set { this.account = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Account { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CallerId 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the caller id to set on the outgoing channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerId
 | 
			
		||||
		{
 | 
			
		||||
			get { return callerId; }
 | 
			
		||||
			set { this.callerId = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CallerId { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set Channel on which to originate the call (The same as you specify in the Dial application command)<br />
 | 
			
		||||
        ///     This property is required.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Context 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the context of the extension to connect to.
 | 
			
		||||
        ///     If you set the context you also have to set the exten and priority properties.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Context
 | 
			
		||||
		{
 | 
			
		||||
			get { return context; }
 | 
			
		||||
			set { this.context = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Exten 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Ser the extension to connect to.
 | 
			
		||||
        ///     If you set the extension you also have to set the context and priority properties.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Exten
 | 
			
		||||
		{
 | 
			
		||||
			get { return exten; }
 | 
			
		||||
			set { this.exten = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Priority 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get /Set the priority of the extension to connect to.
 | 
			
		||||
        ///     If you set the priority you also have to set the context and exten properties.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Priority
 | 
			
		||||
		{
 | 
			
		||||
			get { return priority; }
 | 
			
		||||
			set { this.priority = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Priority { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Application 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set Application to use on connect (use Data for parameters)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Application
 | 
			
		||||
		{
 | 
			
		||||
			get { return application; }
 | 
			
		||||
			set { this.application = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Application { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Data 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the parameters to pass to the application.
 | 
			
		||||
        ///     Data if Application parameter is user
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <summary> Sets the parameters to pass to the application.</summary>
 | 
			
		||||
		public string Data
 | 
			
		||||
		{
 | 
			
		||||
			get { return data; }
 | 
			
		||||
			set { this.data = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Data { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Async 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set <code>true</code> if this is a fast origination.<br />
 | 
			
		||||
		/// For the origination to be asynchronous (allows multiple calls to be generated without waiting for a response).<br/>
 | 
			
		||||
        ///     For the origination to be asynchronous (allows multiple calls to be generated without waiting for a response).
 | 
			
		||||
        ///     <br />
 | 
			
		||||
        ///     Will send OriginateSuccess- and OriginateFailureEvents.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public bool Async
 | 
			
		||||
		{
 | 
			
		||||
			get { return async; }
 | 
			
		||||
			set { this.async = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public bool Async { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ActionCompleteEventClass 
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.OriginateResponseEvent);
 | 
			
		||||
            return typeof (OriginateResponseEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Timeout 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the timeout for the origination in seconds.<br />
 | 
			
		||||
        ///     The channel must be answered within this time, otherwise the origination
 | 
			
		||||
        ///     is considered to have failed and an OriginateFailureEvent is generated.<br />
 | 
			
		||||
        ///     If not set, Asterisk assumes a default value of 30000 meaning 30 seconds.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public int Timeout
 | 
			
		||||
		{
 | 
			
		||||
			get { return timeout; }
 | 
			
		||||
			set { this.timeout = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public int Timeout { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Variable 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the variables to set on the originated call.<br />
 | 
			
		||||
        ///     Variable assignments are of the form "VARNAME=VALUE". You can specify
 | 
			
		||||
| 
						 | 
				
			
			@ -187,9 +163,11 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return Helper.JoinVariables(variables, Common.VAR_DELIMITER, "="); }
 | 
			
		||||
            set { variables = Helper.ParseVariables(variables, value, Common.VAR_DELIMITER); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetVariables() 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the variables dictionary to set on the originated call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -197,19 +175,23 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            return variables;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region SetVariables(IDictionary vars) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Set the variables dictionary to set on the originated call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void SetVariables(Dictionary<string, string> vars)
 | 
			
		||||
        {
 | 
			
		||||
			this.variables = vars;
 | 
			
		||||
            variables = vars;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region GetVariable(string name, string val) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Gets a variable on the originated call. Replaces any existing variable with the same name.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -219,9 +201,11 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
                return string.Empty;
 | 
			
		||||
            return variables[key];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region SetVariable(string name, string val) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Sets a variable dictionary on the originated call. Replaces any existing variable with the same name.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -234,6 +218,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            else
 | 
			
		||||
                variables.Add(key, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,60 +1,11 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    ///     The ParkAction allows to send a Channel to a Parking lot.<br />
 | 
			
		||||
    ///     A successful login is the precondition for sending for that
 | 
			
		||||
    /// </summary>
 | 
			
		||||
 | 
			
		||||
    public class ParkAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
        private string channel;
 | 
			
		||||
        private string channel2;
 | 
			
		||||
        private string timeout;
 | 
			
		||||
        private string parkinglot;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get the name of this action, i.e. "Park".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        override public string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Park"; }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set the Channel which should be parked
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel
 | 
			
		||||
        {
 | 
			
		||||
            get { return this.channel; }
 | 
			
		||||
            set { this.channel = value; }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set the Channel where the Call will end up after the timeout is reached.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel2
 | 
			
		||||
        {
 | 
			
		||||
            get { return this.channel2; }
 | 
			
		||||
            set { this.channel2 = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Timeout in msec, after timeout is reached call will come back to channel2
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Timeout
 | 
			
		||||
        {
 | 
			
		||||
            get { return this.timeout; }
 | 
			
		||||
            set { this.timeout = value; }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set the Parking lot.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Parkinglot
 | 
			
		||||
        {
 | 
			
		||||
            get { return this.parkinglot; }
 | 
			
		||||
            set { this.parkinglot = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new ParkAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -63,9 +14,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="timeout"></param>
 | 
			
		||||
        public ParkAction(string channel, string channel2, string timeout)
 | 
			
		||||
        {
 | 
			
		||||
            this.channel = channel;
 | 
			
		||||
            this.channel2 = channel2;
 | 
			
		||||
            this.timeout = timeout;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.Channel2 = channel2;
 | 
			
		||||
            this.Timeout = timeout;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -77,10 +28,38 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="parkinglot">Set the Parking lot.</param>
 | 
			
		||||
        public ParkAction(string channel, string channel2, string timeout, string parkinglot)
 | 
			
		||||
        {
 | 
			
		||||
            this.channel = channel;
 | 
			
		||||
            this.channel2 = channel2;
 | 
			
		||||
            this.timeout = timeout;
 | 
			
		||||
            this.parkinglot = parkinglot;
 | 
			
		||||
        }
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.Channel2 = channel2;
 | 
			
		||||
            this.Timeout = timeout;
 | 
			
		||||
            this.Parkinglot = parkinglot;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Park".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Park"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Set the Channel which should be parked
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Set the Channel where the Call will end up after the timeout is reached.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel2 { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Timeout in msec, after timeout is reached call will come back to channel2
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Timeout { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Set the Parking lot.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Parkinglot { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -19,14 +20,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.ParkedCallsCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new ParkedCallsAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public ParkedCallsAction()
 | 
			
		||||
		{
 | 
			
		||||
            return typeof (ParkedCallsCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,16 +9,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Ping".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Ping"; }
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new PingAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public PingAction()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public abstract class ProxyAction : ManagerAction
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,65 +6,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class QueueAddAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string queue;
 | 
			
		||||
		private string iface;
 | 
			
		||||
		private string memberName;
 | 
			
		||||
		private int penalty;
 | 
			
		||||
		private bool paused;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "QueueAdd".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "QueueAdd"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the queue the new member will be added to.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the interface to add. To add a specific channel just use the channel name, e.g. "SIP/1234".<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Interface
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.iface; }
 | 
			
		||||
			set { this.iface = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the member to add.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string MemberName
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.memberName; }
 | 
			
		||||
			set { this.memberName = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the penalty for this member.<br/>
 | 
			
		||||
		/// The penalty must be a positive integer or 0 for no penalty. If it is not set 0 is assumed.<br/>
 | 
			
		||||
		/// When calls are distributed members with higher penalties are considered last.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int Penalty
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.penalty; }
 | 
			
		||||
			set { this.penalty = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set if the queue member should be paused when added.<br/>
 | 
			
		||||
		/// <code>true</code> if the queue member should be paused when added.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool Paused
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.paused; }
 | 
			
		||||
			set { this.paused = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty QueueAddAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -81,8 +20,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="iface">Sets the interface to add. To add a specific channel just use the channel name, e.g. "SIP/1234".</param>
 | 
			
		||||
        public QueueAddAction(string queue, string iface)
 | 
			
		||||
        {
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -93,9 +32,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="memberName">the name of the the new member will be added to</param>
 | 
			
		||||
        public QueueAddAction(string queue, string iface, string memberName)
 | 
			
		||||
        {
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.memberName = memberName;
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            this.MemberName = memberName;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -105,16 +44,55 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="queue">the name of the queue the new member will be added to</param>
 | 
			
		||||
        /// <param name="iface">Sets the interface to add. To add a specific channel just use the channel name, e.g. "SIP/1234".</param>
 | 
			
		||||
        /// <param name="memberName">the name of the the new member will be added to</param>
 | 
			
		||||
		/// <param name="penalty">the penalty for this member.<br/>
 | 
			
		||||
        /// <param name="penalty">
 | 
			
		||||
        ///     the penalty for this member.<br />
 | 
			
		||||
        ///     The penalty must be a positive integer or 0 for no penalty. When calls are
 | 
			
		||||
        ///     distributed members with higher penalties are considered last.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public QueueAddAction(string queue, string iface, string memberName, int penalty)
 | 
			
		||||
        {
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.memberName = memberName;
 | 
			
		||||
			this.penalty = penalty;
 | 
			
		||||
		}
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            this.MemberName = memberName;
 | 
			
		||||
            this.Penalty = penalty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "QueueAdd".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "QueueAdd"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the queue the new member will be added to.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the interface to add. To add a specific channel just use the channel name, e.g. "SIP/1234".<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Interface { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the member to add.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string MemberName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the penalty for this member.<br />
 | 
			
		||||
        ///     The penalty must be a positive integer or 0 for no penalty. If it is not set 0 is assumed.<br />
 | 
			
		||||
        ///     When calls are distributed members with higher penalties are considered last.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Penalty { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set if the queue member should be paused when added.<br />
 | 
			
		||||
        ///     <code>true</code> if the queue member should be paused when added.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Paused { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class QueueLogAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _queue;
 | 
			
		||||
        private string _event;
 | 
			
		||||
        private string _uniqueid;
 | 
			
		||||
        private string _interface;
 | 
			
		||||
        private string _message;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Adds custom entry in queue_log.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -31,11 +19,11 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="message"></param>
 | 
			
		||||
        public QueueLogAction(string queue, string @event, string uniqueid, string @interface, string message)
 | 
			
		||||
        {
 | 
			
		||||
            _queue = queue;
 | 
			
		||||
            _event = @event;
 | 
			
		||||
            _uniqueid = uniqueid;
 | 
			
		||||
            _interface = @interface;
 | 
			
		||||
            _message = message;
 | 
			
		||||
            Queue = queue;
 | 
			
		||||
            Event = @event;
 | 
			
		||||
            Uniqueid = uniqueid;
 | 
			
		||||
            Interface = @interface;
 | 
			
		||||
            Message = message;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -43,34 +31,14 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "QueueLog"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Queue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _queue; }
 | 
			
		||||
            set { _queue = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Event
 | 
			
		||||
        {
 | 
			
		||||
            get { return _event; }
 | 
			
		||||
            set { _event = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Event { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Uniqueid
 | 
			
		||||
        {
 | 
			
		||||
            get { return _uniqueid; }
 | 
			
		||||
            set { _uniqueid = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Uniqueid { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Interface
 | 
			
		||||
        {
 | 
			
		||||
            get { return _interface; }
 | 
			
		||||
            set { _interface = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Interface { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Message
 | 
			
		||||
        {
 | 
			
		||||
            get { return _message; }
 | 
			
		||||
            set { _message = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Message { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,49 +7,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class QueuePauseAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string iface;
 | 
			
		||||
		private bool paused;
 | 
			
		||||
		private string queue;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "QueuePause".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return "QueuePause";
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the interface of the member to make available or unavailable.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Interface
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.iface; }
 | 
			
		||||
			set { this.iface = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set Returns the name of the queue the member is made available or unavailable on.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set if the member is made available or unavailable.<br/>
 | 
			
		||||
		/// <code>true</code> to make the member unavailbale,<br/>
 | 
			
		||||
		/// <code>false</code> make the member available
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool Paused
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.paused; }
 | 
			
		||||
			set { this.paused = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty QueuePauseAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -66,8 +21,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="iface">the interface of the member to make unavailable</param>
 | 
			
		||||
        public QueuePauseAction(string iface)
 | 
			
		||||
        {
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.paused = true;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            Paused = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -78,9 +33,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="queue">the queue the member is made unvailable on</param>
 | 
			
		||||
        public QueuePauseAction(string iface, string queue)
 | 
			
		||||
        {
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.paused = true;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            Paused = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -91,8 +46,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="paused"><code>true</code> to make the member unavailbale, <code>false</code> to make the member available</param>
 | 
			
		||||
        public QueuePauseAction(string iface, bool paused)
 | 
			
		||||
        {
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.paused = paused;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            this.Paused = paused;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -104,9 +59,35 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="paused"><code>true</code> to make the member unavailbale, <code>false</code> to make the member available</param>
 | 
			
		||||
        public QueuePauseAction(string iface, string queue, bool paused)
 | 
			
		||||
        {
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.paused = paused;
 | 
			
		||||
		}
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            this.Paused = paused;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "QueuePause".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "QueuePause"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the interface of the member to make available or unavailable.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Interface { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set Returns the name of the queue the member is made available or unavailable on.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set if the member is made available or unavailable.<br />
 | 
			
		||||
        ///     <code>true</code> to make the member unavailbale,<br />
 | 
			
		||||
        ///     <code>false</code> make the member available
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Paused { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class QueuePenaltyAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _interface;
 | 
			
		||||
        private string _penalty;
 | 
			
		||||
        private string _queue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Set the penalty for a queue member.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,9 +17,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="queue"></param>
 | 
			
		||||
        public QueuePenaltyAction(string @interface, string penalty, string queue)
 | 
			
		||||
        {
 | 
			
		||||
            _interface = @interface;
 | 
			
		||||
            _penalty = penalty;
 | 
			
		||||
            _queue = queue;
 | 
			
		||||
            Interface = @interface;
 | 
			
		||||
            Penalty = penalty;
 | 
			
		||||
            Queue = queue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -37,22 +27,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "QueuePenalty"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Interface
 | 
			
		||||
        {
 | 
			
		||||
            get { return _interface; }
 | 
			
		||||
            set { _interface = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Interface { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Penalty
 | 
			
		||||
        {
 | 
			
		||||
            get { return _penalty; }
 | 
			
		||||
            set { _penalty = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Penalty { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Queue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _queue; }
 | 
			
		||||
            set { _queue = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class QueueReloadAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _queue;
 | 
			
		||||
        private string _members;
 | 
			
		||||
        private string _rules;
 | 
			
		||||
        private string _parameters;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Reload a queue, queues, or any sub-section of a queue or queues.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -29,10 +18,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="parameters"></param>
 | 
			
		||||
        public QueueReloadAction(string queue, string members, string rules, string parameters)
 | 
			
		||||
        {
 | 
			
		||||
            _queue = queue;
 | 
			
		||||
            _members = members;
 | 
			
		||||
            _rules = rules;
 | 
			
		||||
            _parameters = parameters;
 | 
			
		||||
            Queue = queue;
 | 
			
		||||
            Members = members;
 | 
			
		||||
            Rules = rules;
 | 
			
		||||
            Parameters = parameters;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -40,28 +29,12 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "QueueReload"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Queue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _queue; }
 | 
			
		||||
            set { _queue = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Members
 | 
			
		||||
        {
 | 
			
		||||
            get { return _members; }
 | 
			
		||||
            set { _members = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Members { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Rules
 | 
			
		||||
        {
 | 
			
		||||
            get { return _rules; }
 | 
			
		||||
            set { _rules = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Rules { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Parameters
 | 
			
		||||
        {
 | 
			
		||||
            get { return _parameters; }
 | 
			
		||||
            set { _parameters = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Parameters { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,39 +6,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class QueueRemoveAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		/// <summary> The name of the queue the member will be removed from.</summary>
 | 
			
		||||
		private string queue;
 | 
			
		||||
		private string iface;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "QueueRemove".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return "QueueRemove";
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the queue the member will be removed from.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the interface to remove.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Interface
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.iface; }
 | 
			
		||||
			set { this.iface = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty QueueRemoveAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -55,8 +20,27 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="iface">the interface of the member to remove</param>
 | 
			
		||||
        public QueueRemoveAction(string queue, string iface)
 | 
			
		||||
        {
 | 
			
		||||
			this.queue = queue;
 | 
			
		||||
			this.iface = iface;
 | 
			
		||||
		}
 | 
			
		||||
            this.Queue = queue;
 | 
			
		||||
            this.Interface = iface;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "QueueRemove".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "QueueRemove"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the queue the member will be removed from.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the interface to remove.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Interface { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,15 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class QueueResetAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _queue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Reset queue statistics.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +15,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="queue"></param>
 | 
			
		||||
        public QueueResetAction(string queue)
 | 
			
		||||
        {
 | 
			
		||||
            _queue = queue;
 | 
			
		||||
            Queue = queue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -31,10 +23,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "QueueReset"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Queue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _queue; }
 | 
			
		||||
            set { _queue = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,22 +1,14 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    public class QueueRuleAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        private string _rule;
 | 
			
		||||
 | 
			
		||||
        public QueueRuleAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public QueueRuleAction(string rule)
 | 
			
		||||
        {
 | 
			
		||||
            _rule = rule;
 | 
			
		||||
            Rule = rule;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
| 
						 | 
				
			
			@ -24,10 +16,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
            get { return "QueueRule"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Rule
 | 
			
		||||
        {
 | 
			
		||||
            get { return _rule; }
 | 
			
		||||
            set { _rule = value; }
 | 
			
		||||
        }
 | 
			
		||||
        public string Rule { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,10 +17,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.event.QueueStatusCompleteEvent" />
 | 
			
		||||
    public class QueueStatusAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string queue;
 | 
			
		||||
		private string member;
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "QueueStatus".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -26,40 +26,38 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            get { return "QueueStatus"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Queue
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the queue filter.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Member
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the member filter.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Member
 | 
			
		||||
		{
 | 
			
		||||
			get { return member; }
 | 
			
		||||
			set { this.member = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Member { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ActionCompleteEventClass 
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.QueueStatusCompleteEvent);
 | 
			
		||||
            return typeof (QueueStatusCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region QueueStatusAction()
 | 
			
		||||
		/// <summary> Creates a new QueueStatusAction.</summary>
 | 
			
		||||
		public QueueStatusAction()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,59 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class RedirectAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string extraChannel;
 | 
			
		||||
		private string exten;
 | 
			
		||||
		private string context;
 | 
			
		||||
		private int priority;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "Redirect".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "Redirect"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set name of the channel to redirect.
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the additional channel to redirect.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string ExtraChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.extraChannel; }
 | 
			
		||||
			set { this.extraChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the destination context.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Context
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.context; }
 | 
			
		||||
			set { this.context = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the destination extension.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Exten
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.exten; }
 | 
			
		||||
			set { this.exten = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the destination priority.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int Priority
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.priority; }
 | 
			
		||||
			set { this.priority = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty RedirectAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -76,10 +21,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="priority">the destination priority</param>
 | 
			
		||||
        public RedirectAction(string channel, string context, string exten, int priority)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.context = context;
 | 
			
		||||
			this.exten = exten;
 | 
			
		||||
			this.priority = priority;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.Context = context;
 | 
			
		||||
            this.Exten = exten;
 | 
			
		||||
            this.Priority = priority;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -92,11 +37,43 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="priority">the destination priority</param>
 | 
			
		||||
        public RedirectAction(string channel, string extraChannel, string context, string exten, int priority)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.extraChannel = extraChannel;
 | 
			
		||||
			this.context = context;
 | 
			
		||||
			this.exten = exten;
 | 
			
		||||
			this.priority = priority;
 | 
			
		||||
		}
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.ExtraChannel = extraChannel;
 | 
			
		||||
            this.Context = context;
 | 
			
		||||
            this.Exten = exten;
 | 
			
		||||
            this.Priority = priority;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "Redirect".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "Redirect"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set name of the channel to redirect.
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the additional channel to redirect.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string ExtraChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the destination context.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the destination extension.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the destination priority.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Priority { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -16,16 +17,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            get { return "SIPPeers"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.PeerlistCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new SIPPeersAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public SIPPeersAction()
 | 
			
		||||
		{
 | 
			
		||||
            return typeof (PeerlistCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -12,26 +13,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// <seealso cref="Manager.event.PeerlistCompleteEvent" />
 | 
			
		||||
    public class SIPShowPeerAction : ManagerActionEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string peer;
 | 
			
		||||
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "SIPShowPeer"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the peer to retrieve.<br/>
 | 
			
		||||
		/// This parameter is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Peer
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.peer; }
 | 
			
		||||
			set { this.peer = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public override Type ActionCompleteEventClass()
 | 
			
		||||
		{
 | 
			
		||||
			return typeof(Event.PeerlistCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary> Creates a new empty SIPShowPeerAction.</summary>
 | 
			
		||||
        public SIPShowPeerAction()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +23,23 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public SIPShowPeerAction(string peer)
 | 
			
		||||
        {
 | 
			
		||||
			this.peer = peer;
 | 
			
		||||
            this.Peer = peer;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "SIPShowPeer"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the peer to retrieve.<br />
 | 
			
		||||
        ///     This parameter is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Peer { get; set; }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
            return typeof (PeerlistCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,52 +1,13 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
	/// The SetCDRUserFieldAction causes the user field of the call detail record for the given channel to be changed.<br/>
 | 
			
		||||
    ///     The SetCDRUserFieldAction causes the user field of the call detail record for the given channel to be changed.
 | 
			
		||||
    ///     <br />
 | 
			
		||||
    ///     Depending on the value of the append property the value is appended or overwritten.<br />
 | 
			
		||||
    ///     The SetCDRUserFieldAction is implemented in <code>apps/app_setcdruserfield.c</code>
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class SetCDRUserFieldAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private string channel;
 | 
			
		||||
		private string userField;
 | 
			
		||||
		private bool append;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of the action, i.e. "SetCDRUserField".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "SetCDRUserField"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the channel to set the cdr user field on.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the value of the cdr user field to set or append.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string UserField
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.userField; }
 | 
			
		||||
			set { this.userField = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set if the value of the cdr user field is appended or overwritten.<br/>
 | 
			
		||||
		/// <code>true</code> to append the value to the cdr user field or <code>false</code> to overwrite.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public bool Append
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.append; }
 | 
			
		||||
			set { this.append = value; }
 | 
			
		||||
		}
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty SetCDRUserFieldAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -55,27 +16,55 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
		/// Creates a new SetCDRUserFieldAction that sets the user field of the call detail record for the given channel to the given value.
 | 
			
		||||
        ///     Creates a new SetCDRUserFieldAction that sets the user field of the call detail record for the given channel to the
 | 
			
		||||
        ///     given value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="channel">the name of the channel</param>
 | 
			
		||||
        /// <param name="userField">the new value of the userfield</param>
 | 
			
		||||
        public SetCDRUserFieldAction(string channel, string userField)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.userField = userField;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.UserField = userField;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
		/// Creates a new SetCDRUserFieldAction that sets the user field of the call detail record for the given channel to the given value.
 | 
			
		||||
        ///     Creates a new SetCDRUserFieldAction that sets the user field of the call detail record for the given channel to the
 | 
			
		||||
        ///     given value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="channel">the name of the channel</param>
 | 
			
		||||
        /// <param name="userField">the new value of the userfield</param>
 | 
			
		||||
        /// <param name="append">true to append the value to the cdr user field or false to overwrite</param>
 | 
			
		||||
        public SetCDRUserFieldAction(string channel, string userField, bool append)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
			this.userField = userField;
 | 
			
		||||
			this.append = append;
 | 
			
		||||
		}
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
            this.UserField = userField;
 | 
			
		||||
            this.Append = append;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of the action, i.e. "SetCDRUserField".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "SetCDRUserField"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel to set the cdr user field on.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the value of the cdr user field to set or append.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string UserField { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set if the value of the cdr user field is appended or overwritten.<br />
 | 
			
		||||
        ///     <code>true</code> to append the value to the cdr user field or <code>false</code> to overwrite.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Append { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,43 +7,13 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    {
 | 
			
		||||
        /// <summary> The channel on which to set the variable.</summary>
 | 
			
		||||
        public string channel;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The name of the variable to set.</summary>
 | 
			
		||||
        public string varName;
 | 
			
		||||
 | 
			
		||||
        /// <summary> The value to store.</summary>
 | 
			
		||||
        public string varValue;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "SetVar".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "SetVar"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the channel.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the variable to set.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Variable
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.varName; }
 | 
			
		||||
			set { this.varName = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the value to store.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Value
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.varValue; }
 | 
			
		||||
			set { this.varValue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty SetVarAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,8 +28,8 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// <param name="value">the new value</param>
 | 
			
		||||
        public SetVarAction(string variable, string value)
 | 
			
		||||
        {
 | 
			
		||||
			this.varName = variable;
 | 
			
		||||
			this.varValue = value;
 | 
			
		||||
            varName = variable;
 | 
			
		||||
            varValue = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +42,43 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public SetVarAction(string channel, string variable, string value)
 | 
			
		||||
        {
 | 
			
		||||
            this.channel = channel;
 | 
			
		||||
			this.varName = variable;
 | 
			
		||||
			this.varValue = value;
 | 
			
		||||
            varName = variable;
 | 
			
		||||
            varValue = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "SetVar".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "SetVar"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Channel
 | 
			
		||||
        {
 | 
			
		||||
            get { return channel; }
 | 
			
		||||
            set { channel = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the variable to set.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Variable
 | 
			
		||||
        {
 | 
			
		||||
            get { return varName; }
 | 
			
		||||
            set { varName = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the value to store.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Value
 | 
			
		||||
        {
 | 
			
		||||
            get { return varValue; }
 | 
			
		||||
            set { varValue = value; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -18,16 +19,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            get { return "Status"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.StatusCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new StatusAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public StatusAction()
 | 
			
		||||
		{
 | 
			
		||||
            return typeof (StatusCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,46 +6,49 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class StopMonitorAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		/// <summary> The name of the channel to end monitoring.</summary>
 | 
			
		||||
		private string channel;
 | 
			
		||||
 | 
			
		||||
        #region Action
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "StopMonitor".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "StopMonitor"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Channel
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel to end monitoring.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Channel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.channel; }
 | 
			
		||||
			set { this.channel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Channel { get; set; }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region StopMonitorAction()
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty StopMonitorAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public StopMonitorAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region StopMonitorAction(string channel)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new StopMonitorAction that ends monitoring of the given channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public StopMonitorAction(string channel)
 | 
			
		||||
        {
 | 
			
		||||
			this.channel = channel;
 | 
			
		||||
            this.Channel = channel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Response;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using AsterNET.Manager.Response;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -32,17 +31,13 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public const string ACTION_DELETE = "delete";
 | 
			
		||||
        public const string ACTION_APPEND = "append";
 | 
			
		||||
 | 
			
		||||
		private string reload;
 | 
			
		||||
		private string srcFileName;
 | 
			
		||||
		private string dstFileName;
 | 
			
		||||
        private readonly Dictionary<string, string> actions;
 | 
			
		||||
        private int actionCounter;
 | 
			
		||||
		private Dictionary<string, string> actions;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new UpdateConfigAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public UpdateConfigAction()
 | 
			
		||||
			: base()
 | 
			
		||||
        {
 | 
			
		||||
            actionCounter = 0;
 | 
			
		||||
            actions = new Dictionary<string, string>();
 | 
			
		||||
| 
						 | 
				
			
			@ -54,9 +49,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public UpdateConfigAction(string srcFilename, string dstFilename, string reload)
 | 
			
		||||
            : this()
 | 
			
		||||
        {
 | 
			
		||||
			this.srcFileName = srcFilename;
 | 
			
		||||
			this.dstFileName = dstFilename;
 | 
			
		||||
			this.reload = reload;
 | 
			
		||||
            SrcFileName = srcFilename;
 | 
			
		||||
            DstFileName = dstFilename;
 | 
			
		||||
            this.Reload = reload;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -65,9 +60,9 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public UpdateConfigAction(string srcFilename, string dstFilename, bool reload)
 | 
			
		||||
            : this()
 | 
			
		||||
        {
 | 
			
		||||
			this.srcFileName = srcFilename;
 | 
			
		||||
			this.dstFileName = dstFilename;
 | 
			
		||||
			this.reload = (reload ? "true" : "");
 | 
			
		||||
            SrcFileName = srcFilename;
 | 
			
		||||
            DstFileName = dstFilename;
 | 
			
		||||
            this.Reload = (reload ? "true" : "");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -76,38 +71,26 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        public UpdateConfigAction(string srcFilename, string dstFilename)
 | 
			
		||||
            : this()
 | 
			
		||||
        {
 | 
			
		||||
			this.srcFileName = srcFilename;
 | 
			
		||||
			this.dstFileName = dstFilename;
 | 
			
		||||
			this.reload = "";
 | 
			
		||||
            SrcFileName = srcFilename;
 | 
			
		||||
            DstFileName = dstFilename;
 | 
			
		||||
            Reload = "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the destination filename.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string DstFileName
 | 
			
		||||
		{
 | 
			
		||||
			get { return dstFileName; }
 | 
			
		||||
			set { dstFileName = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string DstFileName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the source filename.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string SrcFileName
 | 
			
		||||
		{
 | 
			
		||||
			get { return srcFileName; }
 | 
			
		||||
			set { srcFileName = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string SrcFileName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the reload behavior of this action (yes), or sets a specific module (name) to be reloaded.<br />
 | 
			
		||||
        ///     Set to empty string to update without reload.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Reload
 | 
			
		||||
		{
 | 
			
		||||
			get { return reload; }
 | 
			
		||||
			set { reload = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Reload { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action.
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +101,7 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        #region AddCommand(...) 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Adds a command to update a config file while sparing you the details of
 | 
			
		||||
        ///     the Manager's required syntax. If you want to omit one of the command's
 | 
			
		||||
| 
						 | 
				
			
			@ -175,24 +159,27 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            AddCommand(null, null, null, null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Actions 
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Dictionary of the action's desired operations where Map keys contain:<br />
 | 
			
		||||
        ///     action,cat,var,value,match pairs followed by -XXXXXX, and the values contain the values for those keys.
 | 
			
		||||
		/// This method will typically only be used by the ActionBuilder to generate the actual strings to be sent to the manager interface.
 | 
			
		||||
        ///     This method will typically only be used by the ActionBuilder to generate the actual strings to be sent to the
 | 
			
		||||
        ///     manager interface.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Dictionary<string, string> Actions
 | 
			
		||||
        {
 | 
			
		||||
            get { return actions; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public override object ActionCompleteResponseClass()
 | 
			
		||||
        {
 | 
			
		||||
            return new ManagerResponse();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,36 +5,33 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ZapDNDOffAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private int zapChannel;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "ZapDNDOff".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "ZapDNDOff"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the number of the zap channel to switch to dnd off.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int ZapChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.zapChannel; }
 | 
			
		||||
			set { this.zapChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty ZapDNDOffAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ZapDNDOffAction()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new ZapDNDOffAction that disables "Do Not Disturb" status for the given zap channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ZapDNDOffAction(int zapChannel)
 | 
			
		||||
        {
 | 
			
		||||
			this.zapChannel = zapChannel;
 | 
			
		||||
		}
 | 
			
		||||
            this.ZapChannel = zapChannel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ZapDNDOff".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ZapDNDOff"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number of the zap channel to switch to dnd off.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int ZapChannel { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,24 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ZapDNDOnAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private int zapChannel;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "ZapDNDOn".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "ZapDNDOn"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the number of the zap channel to switch to dnd on.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int ZapChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.zapChannel; }
 | 
			
		||||
			set { this.zapChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty ZapDNDOnAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +17,21 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public ZapDNDOnAction(int zapChannel)
 | 
			
		||||
        {
 | 
			
		||||
			this.zapChannel = zapChannel;
 | 
			
		||||
		}
 | 
			
		||||
            this.ZapChannel = zapChannel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ZapDNDOn".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ZapDNDOn"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number of the zap channel to switch to dnd on.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int ZapChannel { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,35 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ZapDialOffhookAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private int zapChannel;
 | 
			
		||||
		private string number;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "ZapDialOffhook".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "ZapDialOffhook"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the number of the zap channel.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int ZapChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.zapChannel; }
 | 
			
		||||
			set { this.zapChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the number to dial.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Number
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.number; }
 | 
			
		||||
			set { this.number = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary> Creates a new empty ZapDialOffhookAction.</summary>
 | 
			
		||||
        public ZapDialOffhookAction()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,8 +15,28 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public ZapDialOffhookAction(int zapChannel, string number)
 | 
			
		||||
        {
 | 
			
		||||
			this.zapChannel = zapChannel;
 | 
			
		||||
			this.number = number;
 | 
			
		||||
		}
 | 
			
		||||
            this.ZapChannel = zapChannel;
 | 
			
		||||
            this.Number = number;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ZapDialOffhook".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ZapDialOffhook"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number of the zap channel.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int ZapChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number to dial.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Number { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,25 +5,6 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ZapHangupAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private int zapChannel;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get the name of this action, i.e. "ZapHangup".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
		{
 | 
			
		||||
			get { return "ZapHangup"; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the number of the zap channel to hangup.<br/>
 | 
			
		||||
		/// This property is mandatory.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public int ZapChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.zapChannel; }
 | 
			
		||||
			set { this.zapChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new empty ZapHangupAction.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +17,21 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public ZapHangupAction(int zapChannel)
 | 
			
		||||
        {
 | 
			
		||||
			this.zapChannel = zapChannel;
 | 
			
		||||
		}
 | 
			
		||||
            this.ZapChannel = zapChannel;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ZapHangup".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ZapHangup"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number of the zap channel to hangup.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int ZapChannel { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
using System;
 | 
			
		||||
using AsterNET.Manager.Event;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -17,16 +19,10 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
        {
 | 
			
		||||
            get { return "ZapShowChannels"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override Type ActionCompleteEventClass()
 | 
			
		||||
        {
 | 
			
		||||
			return typeof(Event.ZapShowChannelsCompleteEvent);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Creates a new ZapShowChannelsAction.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public ZapShowChannelsAction()
 | 
			
		||||
		{
 | 
			
		||||
            return typeof (ZapShowChannelsCompleteEvent);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
namespace AsterNET.Manager.Action
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -6,23 +5,18 @@ namespace AsterNET.Manager.Action
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class ZapTransferAction : ManagerAction
 | 
			
		||||
    {
 | 
			
		||||
		private int zapChannel;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get the name of this action, i.e. "ZapTransfer".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		override public string Action
 | 
			
		||||
        public override string Action
 | 
			
		||||
        {
 | 
			
		||||
            get { return "ZapTransfer"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the number of the zap channel to transfer.<br />
 | 
			
		||||
        ///     This property is mandatory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public int ZapChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.zapChannel; }
 | 
			
		||||
			set { this.zapChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public int ZapChannel { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager
 | 
			
		||||
{
 | 
			
		||||
    public enum AsteriskVersion
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Event
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,12 +6,6 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AGIExecEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string subEvent;
 | 
			
		||||
		private long commandId;
 | 
			
		||||
		private string command;
 | 
			
		||||
		private int resultCode;
 | 
			
		||||
		private string result;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Creates a new AGIExecEvent.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,30 +14,14 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public long CommandId
 | 
			
		||||
		{
 | 
			
		||||
			get { return commandId; }
 | 
			
		||||
			set { this.commandId = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Command
 | 
			
		||||
		{
 | 
			
		||||
			get { return command; }
 | 
			
		||||
			set { this.command = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string SubEvent
 | 
			
		||||
		{
 | 
			
		||||
			get { return subEvent; }
 | 
			
		||||
			set { this.subEvent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Result
 | 
			
		||||
		{
 | 
			
		||||
			get { return result; }
 | 
			
		||||
			set { this.result = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public int ResultCode
 | 
			
		||||
		{
 | 
			
		||||
			get { return resultCode; }
 | 
			
		||||
			set { this.resultCode = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public long CommandId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Command { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string SubEvent { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Result { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int ResultCode { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,38 +5,24 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class AbstractAgentEvent : AbstractAgentVariables
 | 
			
		||||
    {
 | 
			
		||||
		private string queue;
 | 
			
		||||
		private string member;
 | 
			
		||||
		private string memberName;
 | 
			
		||||
        public AbstractAgentEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the queue.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the member's interface.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Member
 | 
			
		||||
		{
 | 
			
		||||
			get { return member; }
 | 
			
		||||
			set { this.member = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the member's interface.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string MemberName
 | 
			
		||||
		{
 | 
			
		||||
			get { return memberName; }
 | 
			
		||||
			set { this.memberName = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Member { get; set; }
 | 
			
		||||
 | 
			
		||||
		public AbstractAgentEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the member's interface.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string MemberName { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,26 +5,16 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class AbstractMeetmeEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string meetMe;
 | 
			
		||||
		private int userNum;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the conference number.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Meetme
 | 
			
		||||
		{
 | 
			
		||||
			get { return meetMe; }
 | 
			
		||||
			set { this.meetMe = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public int Usernum
 | 
			
		||||
		{
 | 
			
		||||
			get { return userNum; }
 | 
			
		||||
			set { this.userNum = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        public AbstractMeetmeEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the conference number.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Meetme { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int Usernum { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,46 +5,29 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class AbstractParkedCallEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string exten;
 | 
			
		||||
		private string callerId;
 | 
			
		||||
		private string callerIdNum;
 | 
			
		||||
		private string callerIdName;
 | 
			
		||||
        public AbstractParkedCallEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the extension the channel is or was parked at.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Exten
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.exten; }
 | 
			
		||||
			set { this.exten = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Exten { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the Caller*ID number of the parked channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerId
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.callerId; }
 | 
			
		||||
			set { this.callerId = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CallerId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the Caller*ID number of the parked channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerIdNum
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.callerIdNum; }
 | 
			
		||||
			set { this.callerIdNum = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CallerIdNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the Caller*ID name of the parked channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerIdName
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.callerIdName; }
 | 
			
		||||
			set { this.callerIdName = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public AbstractParkedCallEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        public string CallerIdName { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,29 +5,20 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class AbstractQueueMemberEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string queue;
 | 
			
		||||
		private string location;
 | 
			
		||||
        public AbstractQueueMemberEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of the queue.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the name of the member's interface.<br />
 | 
			
		||||
        ///     E.g. the channel name or agent group.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Location
 | 
			
		||||
		{
 | 
			
		||||
			get { return location; }
 | 
			
		||||
			set { this.location = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public AbstractQueueMemberEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        public string Location { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,25 +7,16 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// <seealso cref="Manager.event.AgentCallbackLogoffEvent" />
 | 
			
		||||
    public class AgentCallbackLoginEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string loginChan;
 | 
			
		||||
        public AgentCallbackLoginEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the agent that logged in.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get { return agent; }
 | 
			
		||||
			set { this.agent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string LoginChan
 | 
			
		||||
		{
 | 
			
		||||
			get { return loginChan; }
 | 
			
		||||
			set { this.loginChan = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
		public AgentCallbackLoginEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        public string LoginChan { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,85 +8,41 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// <seealso cref="Manager.event.AgentCallbackLoginEvent" />
 | 
			
		||||
    public class AgentCallbackLogoffEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string loginChan;
 | 
			
		||||
		private string loginTime;
 | 
			
		||||
		private string reason;
 | 
			
		||||
 | 
			
		||||
        #region Agent
 | 
			
		||||
 | 
			
		||||
        /// <summary> Returns the name of the agent that logged off.</summary>
 | 
			
		||||
        /// <summary> Sets the name of the agent that logged off.</summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return agent;
 | 
			
		||||
			}
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.agent = value;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region LoginChan
 | 
			
		||||
		public string LoginChan
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return loginChan;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.loginChan = value;
 | 
			
		||||
			}
 | 
			
		||||
        public string LoginChan { get; set; }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region LoginTime
 | 
			
		||||
		public string LoginTime
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return loginTime;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.loginTime = value;
 | 
			
		||||
			}
 | 
			
		||||
        public string LoginTime { get; set; }
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Reason
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Returns the reason for the logoff. The reason is set to Autologoff if the agent has been
 | 
			
		||||
        ///     logged off due to not answering the phone in time. Autologoff is configured by setting
 | 
			
		||||
        ///     <code>autologoff</code> to the appropriate number of seconds in <code>agents.conf</code>.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <summary>Sets the reason for the logoff.</summary>
 | 
			
		||||
		public string Reason
 | 
			
		||||
		{
 | 
			
		||||
			get
 | 
			
		||||
			{
 | 
			
		||||
				return reason;
 | 
			
		||||
			}
 | 
			
		||||
        public string Reason { get; set; }
 | 
			
		||||
 | 
			
		||||
			set
 | 
			
		||||
			{
 | 
			
		||||
				this.reason = value;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public AgentCallbackLogoffEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
using System.Collections;
 | 
			
		||||
namespace AsterNET.Manager.Event
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,82 +7,37 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentCalledEvent : AbstractAgentVariables
 | 
			
		||||
    {
 | 
			
		||||
		private string agentCalled;
 | 
			
		||||
		private string agentName;
 | 
			
		||||
		private string callerId;
 | 
			
		||||
		private string callerIdName;
 | 
			
		||||
		private string callerIdNum;
 | 
			
		||||
		private string channelCalling;
 | 
			
		||||
		private string context;
 | 
			
		||||
		private string destinationChannel;
 | 
			
		||||
		private string extension;
 | 
			
		||||
		private string priority;
 | 
			
		||||
		private string queue;
 | 
			
		||||
        public AgentCalledEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Queue { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string AgentName { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string AgentCalled { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ChannelCalling { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string DestinationChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string CallerId { get; set; }
 | 
			
		||||
 | 
			
		||||
		public string Queue
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.queue; }
 | 
			
		||||
			set { this.queue = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string AgentName
 | 
			
		||||
		{
 | 
			
		||||
			get { return agentName; }
 | 
			
		||||
			set { this.agentName = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string AgentCalled
 | 
			
		||||
		{
 | 
			
		||||
			get { return agentCalled; }
 | 
			
		||||
			set { this.agentCalled = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string ChannelCalling
 | 
			
		||||
		{
 | 
			
		||||
			get { return channelCalling; }
 | 
			
		||||
			set { this.channelCalling = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string DestinationChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.destinationChannel; }
 | 
			
		||||
			set { this.destinationChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string CallerId
 | 
			
		||||
		{
 | 
			
		||||
			get { return callerId; }
 | 
			
		||||
			set { this.callerId = value; }
 | 
			
		||||
		}
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the Caller*ID number of the calling channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerIdNum
 | 
			
		||||
		{
 | 
			
		||||
			get { return callerIdNum; }
 | 
			
		||||
			set { this.callerIdNum = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CallerIdNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the Caller*ID name of the calling channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string CallerIdName
 | 
			
		||||
		{
 | 
			
		||||
			get { return callerIdName; }
 | 
			
		||||
			set { this.callerIdName = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Context
 | 
			
		||||
		{
 | 
			
		||||
			get { return context; }
 | 
			
		||||
			set { this.context = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Extension
 | 
			
		||||
		{
 | 
			
		||||
			get { return extension; }
 | 
			
		||||
			set { this.extension = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Priority
 | 
			
		||||
		{
 | 
			
		||||
			get { return priority; }
 | 
			
		||||
			set { this.priority = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CallerIdName { get; set; }
 | 
			
		||||
 | 
			
		||||
		public AgentCalledEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        public string Context { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Extension { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Priority { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,37 +5,24 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentCompleteEvent : AbstractAgentEvent
 | 
			
		||||
    {
 | 
			
		||||
		private long holdTime;
 | 
			
		||||
		private string reason;
 | 
			
		||||
		private long talkTime;
 | 
			
		||||
        public AgentCompleteEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the amount of time the caller was on hold.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public long HoldTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return holdTime; }
 | 
			
		||||
			set { this.holdTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public long HoldTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the amount of time the caller talked to the agent.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public long TalkTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return talkTime; }
 | 
			
		||||
			set { this.talkTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public long TalkTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set if the agent or the caller terminated the call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Reason
 | 
			
		||||
		{
 | 
			
		||||
			get { return reason; }
 | 
			
		||||
			set { this.reason = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public AgentCompleteEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{ }
 | 
			
		||||
        public string Reason { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,40 +5,24 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AgentConnectEvent : AbstractAgentEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string bridgedChannel;
 | 
			
		||||
		private long holdTime;
 | 
			
		||||
		private long ringTime;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the amount of time the caller was on hold.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public long HoldTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return holdTime; }
 | 
			
		||||
			set { this.holdTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set bridged channel.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string BridgedChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.bridgedChannel; }
 | 
			
		||||
			set { this.bridgedChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the amount of time the caller was on ring.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public long RingTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return ringTime; }
 | 
			
		||||
			set { this.ringTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public AgentConnectEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the amount of time the caller was on hold.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long HoldTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set bridged channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string BridgedChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the amount of time the caller was on ring.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long RingTime { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,26 +7,16 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// <seealso cref="Manager.event.AgentLogoffEvent" />
 | 
			
		||||
    public class AgentLoginEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string loginChan;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the agent that logged in.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get { return agent; }
 | 
			
		||||
			set { this.agent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string LoginChan
 | 
			
		||||
		{
 | 
			
		||||
			get { return loginChan; }
 | 
			
		||||
			set { this.loginChan = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        public AgentLoginEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the agent that logged in.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string LoginChan { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,32 +1,23 @@
 | 
			
		|||
namespace AsterNET.Manager.Event
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
	/// An AgentCallbackLogoffEvent is triggered when an agent that previously logged in using AgentLogin is logged of.<br/>
 | 
			
		||||
    ///     An AgentCallbackLogoffEvent is triggered when an agent that previously logged in using AgentLogin is logged of.
 | 
			
		||||
    ///     <br />
 | 
			
		||||
    ///     It is implemented in <code>channels/chan_agent.c</code>
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <seealso cref="Manager.event.AgentLoginEvent" />
 | 
			
		||||
    public class AgentLogoffEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string loginTime;
 | 
			
		||||
		
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the agent that logged off.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get { return agent; }
 | 
			
		||||
			set { this.agent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string LoginTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return loginTime; }
 | 
			
		||||
			set { this.loginTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        public AgentLogoffEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the agent that logged off.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string LoginTime { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,29 +7,21 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// <seealso cref="Manager.Action.AgentsAction" />
 | 
			
		||||
    public class AgentsEvent : ResponseEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string agent;
 | 
			
		||||
		private string name;
 | 
			
		||||
		private string status;
 | 
			
		||||
		private string loggedInChan;
 | 
			
		||||
		private string talkingTo;
 | 
			
		||||
		private long loggedInTime;
 | 
			
		||||
        public AgentsEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the agentid.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Agent
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.agent; }
 | 
			
		||||
			set { this.agent = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Agent { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of this agent.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Name
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.name; }
 | 
			
		||||
			set { this.name = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the status of this agent.<br />
 | 
			
		||||
        ///     This is one of
 | 
			
		||||
| 
						 | 
				
			
			@ -44,39 +36,21 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
        ///         <dd>Don't know anything about agent. Shouldn't ever get this.</dd>
 | 
			
		||||
        ///     </dl>
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Status
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.status; }
 | 
			
		||||
			set { this.status = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string Status { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of channel this agent logged in from or "n/a" if the agent is not logged in.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string LoggedInChan
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.loggedInChan; }
 | 
			
		||||
			set { this.loggedInChan = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string LoggedInChan { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the time (in seconds since 01/01/1970) when the agent logged in or 0 if the user is not logged.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public long LoggedInTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.loggedInTime; }
 | 
			
		||||
			set { this.loggedInTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public long LoggedInTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the numerical Caller*ID of the channel this agent is talking toor "n/a" if this agent is talking to nobody.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string TalkingTo
 | 
			
		||||
		{
 | 
			
		||||
			get { return this.talkingTo; }
 | 
			
		||||
			set { this.talkingTo = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public AgentsEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
        public string TalkingTo { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -6,7 +6,10 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class AlarmEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string alarm;
 | 
			
		||||
        public AlarmEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the kind of alarm that happened.<br />
 | 
			
		||||
| 
						 | 
				
			
			@ -20,15 +23,6 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
        ///         <li>Not Open</li>
 | 
			
		||||
        ///     </ul>
 | 
			
		||||
        /// </summary>
 | 
			
		||||
		public string Alarm
 | 
			
		||||
		{
 | 
			
		||||
			get { return alarm; }
 | 
			
		||||
			set { this.alarm = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public AlarmEvent(ManagerConnection source)
 | 
			
		||||
			: base(source)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
        public string Alarm { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,40 +1,22 @@
 | 
			
		|||
using System;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Event
 | 
			
		||||
{
 | 
			
		||||
    public class AsyncAGIEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string subEvent;
 | 
			
		||||
		private string env;
 | 
			
		||||
		private string result;
 | 
			
		||||
		private string commandId;
 | 
			
		||||
        public string Result { get; set; }
 | 
			
		||||
 | 
			
		||||
		public string Result
 | 
			
		||||
		{
 | 
			
		||||
			get { return result; }
 | 
			
		||||
			set { result = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string CommandId
 | 
			
		||||
		{
 | 
			
		||||
			get { return commandId; }
 | 
			
		||||
			set { commandId = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string SubEvent
 | 
			
		||||
		{
 | 
			
		||||
			get { return subEvent; }
 | 
			
		||||
			set { subEvent = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Env
 | 
			
		||||
		{
 | 
			
		||||
			get { return env; }
 | 
			
		||||
			set { env = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string CommandId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string SubEvent { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Env { get; set; }
 | 
			
		||||
 | 
			
		||||
        #region Constructor - AsyncAGIEvent(ManagerConnection source)
 | 
			
		||||
 | 
			
		||||
        public AsyncAGIEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,107 +8,41 @@ namespace AsterNET.Manager.Event
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class CdrEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string accountCode;
 | 
			
		||||
		private string src;
 | 
			
		||||
		private string destination;
 | 
			
		||||
		private string destinationContext;
 | 
			
		||||
		private string callerId;
 | 
			
		||||
		private string destinationChannel;
 | 
			
		||||
		private string lastApplication;
 | 
			
		||||
		private string lastData;
 | 
			
		||||
		private string startTime;
 | 
			
		||||
		private string answerTime;
 | 
			
		||||
		private string endTime;
 | 
			
		||||
		private long duration;
 | 
			
		||||
		private long billableSeconds;
 | 
			
		||||
		private string disposition;
 | 
			
		||||
		private string amaFlags;
 | 
			
		||||
		private string userField;
 | 
			
		||||
 | 
			
		||||
        public CdrEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		public string AccountCode
 | 
			
		||||
		{
 | 
			
		||||
			get { return accountCode; }
 | 
			
		||||
			set { this.accountCode = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Src
 | 
			
		||||
		{
 | 
			
		||||
			get { return src; }
 | 
			
		||||
			set { this.src = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Destination
 | 
			
		||||
		{
 | 
			
		||||
			get { return destination; }
 | 
			
		||||
			set { this.destination = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string DestinationContext
 | 
			
		||||
		{
 | 
			
		||||
			get { return destinationContext; }
 | 
			
		||||
			set { this.destinationContext = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string CallerId
 | 
			
		||||
		{
 | 
			
		||||
			get { return callerId; }
 | 
			
		||||
			set { this.callerId = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string DestinationChannel
 | 
			
		||||
		{
 | 
			
		||||
			get { return destinationChannel; }
 | 
			
		||||
			set { this.destinationChannel = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string LastApplication
 | 
			
		||||
		{
 | 
			
		||||
			get { return lastApplication; }
 | 
			
		||||
			set { this.lastApplication = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string LastData
 | 
			
		||||
		{
 | 
			
		||||
			get { return lastData; }
 | 
			
		||||
			set { this.lastData = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string StartTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return startTime; }
 | 
			
		||||
			set { this.startTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string AnswerTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return answerTime; }
 | 
			
		||||
			set { this.answerTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string EndTime
 | 
			
		||||
		{
 | 
			
		||||
			get { return endTime; }
 | 
			
		||||
			set { this.endTime = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public long Duration
 | 
			
		||||
		{
 | 
			
		||||
			get { return duration; }
 | 
			
		||||
			set { this.duration = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public long BillableSeconds
 | 
			
		||||
		{
 | 
			
		||||
			get { return billableSeconds; }
 | 
			
		||||
			set { this.billableSeconds = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string Disposition
 | 
			
		||||
		{
 | 
			
		||||
			get { return disposition; }
 | 
			
		||||
			set { this.disposition = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string AmaFlags
 | 
			
		||||
		{
 | 
			
		||||
			get { return amaFlags; }
 | 
			
		||||
			set { this.amaFlags = value; }
 | 
			
		||||
		}
 | 
			
		||||
		public string UserField
 | 
			
		||||
		{
 | 
			
		||||
			get { return userField; }
 | 
			
		||||
			set { this.userField = value; }
 | 
			
		||||
		}
 | 
			
		||||
        public string AccountCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Src { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Destination { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string DestinationContext { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string CallerId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string DestinationChannel { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string LastApplication { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string LastData { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string StartTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string AnswerTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string EndTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public long Duration { get; set; }
 | 
			
		||||
 | 
			
		||||
        public long BillableSeconds { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string Disposition { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string AmaFlags { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string UserField { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,57 +1,26 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace AsterNET.Manager.Event
 | 
			
		||||
{
 | 
			
		||||
    public class ChannelReloadEvent : ManagerEvent
 | 
			
		||||
    {
 | 
			
		||||
		private string channelType;
 | 
			
		||||
		private string reloadreason;
 | 
			
		||||
		private int registryCount;
 | 
			
		||||
		private int userCount;
 | 
			
		||||
		private int peerCount;
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// For SIP peers this is "SIP".
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string ChannelType
 | 
			
		||||
		{
 | 
			
		||||
			get { return channelType; }
 | 
			
		||||
			set { this.channelType = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// Get/Set the name of the channel.
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		public string ReloadReason
 | 
			
		||||
		{
 | 
			
		||||
			get { return reloadreason; }
 | 
			
		||||
			set { this.reloadreason = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public int UserCount
 | 
			
		||||
		{
 | 
			
		||||
			get { return userCount; }
 | 
			
		||||
			set { this.userCount = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public int PeerCount
 | 
			
		||||
		{
 | 
			
		||||
			get { return peerCount; }
 | 
			
		||||
			set { this.peerCount = value; }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public int RegistryCount
 | 
			
		||||
		{
 | 
			
		||||
			get { return registryCount; }
 | 
			
		||||
			set { this.registryCount = value; }
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
        public ChannelReloadEvent(ManagerConnection source)
 | 
			
		||||
            : base(source)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     For SIP peers this is "SIP".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string ChannelType { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///     Get/Set the name of the channel.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string ReloadReason { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int UserCount { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int PeerCount { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int RegistryCount { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue