public TelecomScriptInterface(CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService pbxRegistrar/*, ExtensionStateService extStateService*/, int lineNumber)
        {
            this.telecomProvider = telecomProvider;
            this.dataProvider = dataProvider;
            this.lineNumber = lineNumber;
            this.pluginManager = pluginManager;
            this.pbxRegistrar = pbxRegistrar;
            //this.extStateService = extStateService;

            // Attach to our telecom provider events
            telecomProvider.CallEnded += new EventHandler<LineEventArgs>(telecomProvider_CallEnded);
            telecomProvider.DTMFToneRecognized += new EventHandler<CallInputEventArgs>(telecomProvider_DTMFToneRecognized);
            telecomProvider.FinishedSpeaking += new EventHandler<LineEventArgs>(telecomProvider_FinishedSpeaking);
            telecomProvider.SoundFinishedPlaying += new EventHandler<LineEventArgs>(telecomProvider_SoundFinishedPlaying);
            telecomProvider.TransferFailed += new EventHandler<LineEventArgs>(telecomProvider_TransferFailed);
            telecomProvider.TransferSucceeded += new EventHandler<LineEventArgs>(telecomProvider_TransferSucceeded);
            telecomProvider.CallConnected += new EventHandler<CallEventArgs>(telecomProvider_CallConnected);
            telecomProvider.CallFailed += new EventHandler<CallFailureEventArgs>(telecomProvider_CallFailed);
            telecomProvider.FaxToneDetected += new EventHandler<LineEventArgs>(telecomProvider_FaxToneDetected);
            telecomProvider.RemoteOnHold += new EventHandler<LineEventArgs>(telecomProvider_RemoteOnHold);
            telecomProvider.RemoteOffHold += new EventHandler<LineEventArgs>(telecomProvider_RemoteOffHold);
            telecomProvider.SpeechRecognized += new EventHandler<CallInputEventArgs>(telecomProvider_SpeechRecognized);
            telecomProvider.IncomingTransfer += new EventHandler<CallButler.Telecom.TransferEventArgs>(telecomProvider_IncomingTransfer);
            telecomProvider.CallTemporarilyMoved += new EventHandler<CallEventArgs>(telecomProvider_CallTemporarilyMoved);
            telecomProvider.AnswerDetectHuman += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectHuman);
            telecomProvider.AnswerDetectMachine += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectMachine);
            telecomProvider.AnswerDetectMachineGreetingFinished += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectMachineGreetingFinished);

            imlInterp = new WOSI.IVR.IML.IMLInterpreter(WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.ImlPluginsFolder));

            // Attach to our interpreter events
            imlInterp.AsyncExternalAction += new EventHandler<AsyncExternalActionEventArgs>(imlInterp_AsyncExternalAction);
            imlInterp.DeleteLastRecording += new EventHandler(imlInterp_DeleteLastRecording);
            imlInterp.CopyLastRecording += new EventHandler<SoundFileEventArgs>(imlInterp_CopyLastRecording);
            imlInterp.HangUp += new EventHandler(imlInterp_HangUp);
            imlInterp.PlaySound += new EventHandler<PlaySoundEventArgs>(imlInterp_PlaySound);
            imlInterp.ScriptError += new EventHandler<ScriptErrorEventArgs>(imlInterp_ScriptError);
            imlInterp.ScriptFinished += new EventHandler(imlInterp_ScriptFinished);
            imlInterp.SpeakText += new EventHandler<SpeakTextEventArgs>(imlInterp_SpeakText);
            imlInterp.StartRecording += new EventHandler<SoundFileEventArgs>(imlInterp_StartRecording);
            imlInterp.StopRecording += new EventHandler<StopRecordingEventArgs>(imlInterp_StopRecording);
            imlInterp.SyncExternalAction += new EventHandler<SyncExternalActionEventArgs>(imlInterp_SyncExternalAction);
            imlInterp.TransferCall += new EventHandler<WOSI.IVR.IML.TransferEventArgs>(imlInterp_TransferCall);
            imlInterp.Call += new EventHandler<TelephoneNumberEventArgs>(imlInterp_Call);
            imlInterp.StopAllSounds += new EventHandler(imlInterp_StopAllSounds);
            imlInterp.ScriptStarted += new EventHandler(imlInterp_ScriptStarted);
            imlInterp.NewSpeechPhrases += new EventHandler<SpeechPhraseEventArgs>(imlInterp_NewSpeechPhrases);
            imlInterp.TraceMessage += new EventHandler<TraceEventArgs>(imlInterp_TraceMessage);
            imlInterp.JoinConference += new EventHandler<ConferenceEventArgs>(imlInterp_JoinConference);
            imlInterp.LeaveConference += new EventHandler(imlInterp_LeaveConference);

            // Create our default internal provider
            WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable defaultInternalProviderTable = new WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable();

            defaultInternalProvider = defaultInternalProviderTable.NewProvidersRow();

            defaultInternalProvider.CustomerID = Properties.Settings.Default.CustomerID;
            defaultInternalProvider.AutoDetectAudio = true;
            defaultInternalProvider.EnableRegistration = false;
            defaultInternalProvider.SupressOutboundUsername = false;

            if (Properties.Settings.Default.InternalSIPDomain != null && Properties.Settings.Default.InternalSIPDomain.Length > 0)
                defaultInternalProvider.Domain = Properties.Settings.Default.InternalSIPDomain;
            else
            {
                // Get the IP of this machine
                try
                {
                    System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());

                    defaultInternalProvider.Domain = telecomProvider.LocalIPAddress;
                }
                catch
                {
                    defaultInternalProvider.Domain = Environment.MachineName;
                }
            }

            defaultInternalProvider.IsDefault = false;
        }
        public TelecomScriptInterface(CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService pbxRegistrar /*, ExtensionStateService extStateService*/, int lineNumber)
        {
            this.telecomProvider = telecomProvider;
            this.dataProvider    = dataProvider;
            this.lineNumber      = lineNumber;
            this.pluginManager   = pluginManager;
            this.pbxRegistrar    = pbxRegistrar;
            //this.extStateService = extStateService;

            // Attach to our telecom provider events
            telecomProvider.CallEnded            += new EventHandler <LineEventArgs>(telecomProvider_CallEnded);
            telecomProvider.DTMFToneRecognized   += new EventHandler <CallInputEventArgs>(telecomProvider_DTMFToneRecognized);
            telecomProvider.FinishedSpeaking     += new EventHandler <LineEventArgs>(telecomProvider_FinishedSpeaking);
            telecomProvider.SoundFinishedPlaying += new EventHandler <LineEventArgs>(telecomProvider_SoundFinishedPlaying);
            telecomProvider.TransferFailed       += new EventHandler <LineEventArgs>(telecomProvider_TransferFailed);
            telecomProvider.TransferSucceeded    += new EventHandler <LineEventArgs>(telecomProvider_TransferSucceeded);
            telecomProvider.CallConnected        += new EventHandler <CallEventArgs>(telecomProvider_CallConnected);
            telecomProvider.CallFailed           += new EventHandler <CallFailureEventArgs>(telecomProvider_CallFailed);
            telecomProvider.FaxToneDetected      += new EventHandler <LineEventArgs>(telecomProvider_FaxToneDetected);
            telecomProvider.RemoteOnHold         += new EventHandler <LineEventArgs>(telecomProvider_RemoteOnHold);
            telecomProvider.RemoteOffHold        += new EventHandler <LineEventArgs>(telecomProvider_RemoteOffHold);
            telecomProvider.SpeechRecognized     += new EventHandler <CallInputEventArgs>(telecomProvider_SpeechRecognized);
            telecomProvider.IncomingTransfer     += new EventHandler <CallButler.Telecom.TransferEventArgs>(telecomProvider_IncomingTransfer);
            telecomProvider.CallTemporarilyMoved += new EventHandler <CallEventArgs>(telecomProvider_CallTemporarilyMoved);
            telecomProvider.AnswerDetectHuman    += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectHuman);
            telecomProvider.AnswerDetectMachine  += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectMachine);
            telecomProvider.AnswerDetectMachineGreetingFinished += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectMachineGreetingFinished);

            imlInterp = new WOSI.IVR.IML.IMLInterpreter(WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.ImlPluginsFolder));

            // Attach to our interpreter events
            imlInterp.AsyncExternalAction += new EventHandler <AsyncExternalActionEventArgs>(imlInterp_AsyncExternalAction);
            imlInterp.DeleteLastRecording += new EventHandler(imlInterp_DeleteLastRecording);
            imlInterp.CopyLastRecording   += new EventHandler <SoundFileEventArgs>(imlInterp_CopyLastRecording);
            imlInterp.HangUp             += new EventHandler(imlInterp_HangUp);
            imlInterp.PlaySound          += new EventHandler <PlaySoundEventArgs>(imlInterp_PlaySound);
            imlInterp.ScriptError        += new EventHandler <ScriptErrorEventArgs>(imlInterp_ScriptError);
            imlInterp.ScriptFinished     += new EventHandler(imlInterp_ScriptFinished);
            imlInterp.SpeakText          += new EventHandler <SpeakTextEventArgs>(imlInterp_SpeakText);
            imlInterp.StartRecording     += new EventHandler <SoundFileEventArgs>(imlInterp_StartRecording);
            imlInterp.StopRecording      += new EventHandler <StopRecordingEventArgs>(imlInterp_StopRecording);
            imlInterp.SyncExternalAction += new EventHandler <SyncExternalActionEventArgs>(imlInterp_SyncExternalAction);
            imlInterp.TransferCall       += new EventHandler <WOSI.IVR.IML.TransferEventArgs>(imlInterp_TransferCall);
            imlInterp.Call             += new EventHandler <TelephoneNumberEventArgs>(imlInterp_Call);
            imlInterp.StopAllSounds    += new EventHandler(imlInterp_StopAllSounds);
            imlInterp.ScriptStarted    += new EventHandler(imlInterp_ScriptStarted);
            imlInterp.NewSpeechPhrases += new EventHandler <SpeechPhraseEventArgs>(imlInterp_NewSpeechPhrases);
            imlInterp.TraceMessage     += new EventHandler <TraceEventArgs>(imlInterp_TraceMessage);
            imlInterp.JoinConference   += new EventHandler <ConferenceEventArgs>(imlInterp_JoinConference);
            imlInterp.LeaveConference  += new EventHandler(imlInterp_LeaveConference);

            // Create our default internal provider
            WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable defaultInternalProviderTable = new WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable();

            defaultInternalProvider = defaultInternalProviderTable.NewProvidersRow();

            defaultInternalProvider.CustomerID              = Properties.Settings.Default.CustomerID;
            defaultInternalProvider.AutoDetectAudio         = true;
            defaultInternalProvider.EnableRegistration      = false;
            defaultInternalProvider.SupressOutboundUsername = false;

            if (Properties.Settings.Default.InternalSIPDomain != null && Properties.Settings.Default.InternalSIPDomain.Length > 0)
            {
                defaultInternalProvider.Domain = Properties.Settings.Default.InternalSIPDomain;
            }
            else
            {
                // Get the IP of this machine
                try
                {
                    System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());

                    defaultInternalProvider.Domain = telecomProvider.LocalIPAddress;
                }
                catch
                {
                    defaultInternalProvider.Domain = Environment.MachineName;
                }
            }

            defaultInternalProvider.IsDefault = false;
        }