Example #1
0
 public AsteriskConnector()
 {
     InitializeComponent();
     try
     {
         //Trace.Listeners.Add(new TextWriterTraceListener("asteriskconnector.log"));
         log.Debug("Initializing asterisk connector...");
         string address = Properties.Settings.Default.AsteriskServer;
         int port = Convert.ToInt32(Properties.Settings.Default.AsteriskPort);
         string user = Properties.Settings.Default.AsteriskUser;
         string password = Properties.Settings.Default.AsteriskUserPassword;
         log.Debug("Creating new manager connection: " + address + ":" + port + " as " + user);
         manager = new ManagerConnection(address, port, user, password);
         manager.PingInterval = Properties.Settings.Default.AsteriskPingInterval;
         manager.KeepAlive = true;
         manager.FireAllEvents = true;
         manager.UnhandledEvent += new ManagerEventHandler(manager_UnhandledEvent);
         
         log.Debug("Creating StateServer Proxy: ");
         ss = new StateServer(Properties.Settings.Default.StateServerUrl);
         
         log.Debug("Creating AsteriskCTIService...");
         acs = new AsteriskCTIService(manager);
         host = new ServiceHost(acs);
         log.Debug("Hosting AsteriskCTIService...");
         host.Open();
     }
     catch (Exception e)
     {
         log.Debug("Error while initializing AsteriskConnector: " + e.Message);
     }
 }
Example #2
0
        protected override void OnStart(string[] args)
        {
            try
            {
                //Trace.Listeners.Add(new TextWriterTraceListener("asteriskconnector.log"));
                log.Debug("Initializing tapi connector...");
                Calls = new Hashtable();
                manager = new TapiManager("TALK TAPI CTI Service");
                if (manager.Initialize())
                {
                    log.Debug("Creating LineControlServer Proxy: ");
                    ss = new StateServer(Properties.Settings.Default.LineControlServerUrl);

                    log.Debug("Creating TAPICTIService...");
                    host = new ServiceHost(new TAPICTIService(manager));
                    log.Debug("Hosting TAPICTIService...");
                    host.Open();
                    log.Debug("Creating TAPISnapshotService...");
                    snapshotHost = new ServiceHost(new TAPISnapshotServer(manager));
                    log.Debug("Hosting TAPISnapshotService...");
                    snapshotHost.Open();
                    isInitialized = true;
                }
                else
                {
                    log.Debug("Unable to initialize TAPI Manager");
                }
            }
            catch (Exception e)
            {
                log.Debug("Error while initializing TAPIConnector: " + e.Message);
            }
            log.Debug("TAPI Connector starting");
            if (isInitialized)
            {
                manager.AddressChanged += new EventHandler<AddressInfoChangeEventArgs>(manager_AddressChanged);
                manager.CallInfoChanged += new EventHandler<CallInfoChangeEventArgs>(manager_CallInfoChanged);
                manager.CallStateChanged += new EventHandler<CallStateEventArgs>(manager_CallStateChanged);
                manager.LineAdded += new EventHandler<LineAddedEventArgs>(manager_LineAdded);
                manager.LineChanged += new EventHandler<LineInfoChangeEventArgs>(manager_LineChanged);
                manager.LineRemoved += new EventHandler<LineRemovedEventArgs>(manager_LineRemoved);
                manager.LineRinging += new EventHandler<RingEventArgs>(manager_LineRinging);
                manager.NewCall += new EventHandler<NewCallEventArgs>(manager_NewCall);
                manager.PhoneAdded += new EventHandler<PhoneAddedEventArgs>(manager_PhoneAdded);
                manager.PhoneRemoved += new EventHandler<PhoneRemovedEventArgs>(manager_PhoneRemoved);
                manager.ReinitRequired += new EventHandler(manager_ReinitRequired);
                
                foreach (TapiLine line in manager.Lines)
                {
                    line.Changed += new EventHandler<LineInfoChangeEventArgs>(line_Changed);
                    line.AddressChanged += new EventHandler<AddressInfoChangeEventArgs>(line_AddressChanged);
                    line.CallInfoChanged += new EventHandler<CallInfoChangeEventArgs>(line_CallInfoChanged);
                    line.CallStateChanged += new EventHandler<CallStateEventArgs>(line_CallStateChanged);
                    line.NewCall += new EventHandler<NewCallEventArgs>(line_NewCall);
                    line.Ringing += new EventHandler<RingEventArgs>(line_Ringing);
                    
                    

                    if (!line.IsOpen)
                    {
                        try
                        {
                            log.Debug("Opening line: " + line.ToString() + " name: " + line.Name);
                            line.Open(line.Capabilities.MediaModes);
                            
                            try
                            {
                                log.Debug("Parsing " + line.ToString() +" adresses");
                                foreach (TapiAddress address in line.Addresses)
                                {
                                    address.CallInfoChanged += new EventHandler<CallInfoChangeEventArgs>(address_CallInfoChanged);
                                    address.CallStateChanged += new EventHandler<CallStateEventArgs>(address_CallStateChanged);
                                    address.Changed += new EventHandler<AddressInfoChangeEventArgs>(address_Changed);
                                    address.NewCall += new EventHandler<NewCallEventArgs>(address_NewCall);
                                    
                                    ss.SetLineControl(GetLineControl(address));
                                }
                            }
                            catch (Exception e)
                            {
                                log.Error("Error while parsing " + line.ToString() + " addresses: " + e.Message);
                            }

                            //linedevspecific etrali
                            try
                            {
                                log.Debug(line.ToString() + " device specific data : " + System.Text.Encoding.ASCII.GetString(line.Status.DeviceSpecificData));
                                line.NegotiateExtensions(Properties.Settings.Default.DevSpecificMinVersion, Properties.Settings.Default.DevSpecificMaxVersion, new EventHandler<DeviceSpecificEventArgs>(line_DevSpecific));
                            }
                            catch (Exception lne)
                            {
                                log.Error("Unable to negotiate dev specific extensions for " + line.ToString() + " " + lne.ToString());
                            }
                        }
                        catch
                        {
                            log.Error("Error while opening line: " + line.ToString());
                        }
                    }
                }
            }
        }