public IEnumerable<Connection> GetConnections(XDocument settingsDocument)
        {
            var xmlConnections = settingsDocument.Descendants("Connection").Where(c => c.Element("Name") != null);
            var connections = new List<Connection>();
            foreach (var connectionElement in xmlConnections)
            {
                var connection = new Connection
                                     {
                                         Name = GetSafeElementValue(connectionElement, "Name"),
                                         UserName = GetSafeElementValue(connectionElement, "UserName"),
                                         Password = GetSafeElementValue(connectionElement, "Password"),
                                         Domain = GetSafeElementValue(connectionElement, "Domain")
                                     };

                var xmlRoutes = connectionElement.Element("Routes");
                if (xmlRoutes != null)
                {
                    connection.Routes =
                        xmlRoutes.Elements("Route").Select(
                            e => new Route
                            {
                                NetAddress = GetSafeElementValue(e, "NetAddress"),
                                Mask = GetSafeElementValue(e, "Mask")
                            });
                }

                connections.Add(connection);
            }

            return connections;
        }
Beispiel #2
0
        public bool Connect(Connection connection)
        {
            try
            {
                if (!CheckConnection(connection))
                {
                    var arguments = new StringBuilder();
                    arguments.AppendFormat("{0} {1} {2}", connection.Name, connection.UserName,
                                                  connection.Password);

                    if (!string.IsNullOrWhiteSpace(connection.Domain))
                    {
                        arguments.AppendFormat(" /DOMAIN:{0}", connection.Domain);
                    }
                     
                    ExecuteProcessSync("rasdial.exe", arguments.ToString());
                }

                var netif = NetworkInterface.GetAllNetworkInterfaces().SingleOrDefault(n => n.Name == connection.Name);
                if (netif != null)
                {
                    IPInterfaceProperties properties = netif.GetIPProperties();

                    var ipAddress = properties.UnicastAddresses.First().Address;

                    foreach (var route in connection.Routes)
                    {
                        string routeArgs = string.Format("add {0} mask {1} {2}", route.NetAddress, route.Mask, ipAddress);
                        ExecuteProcessSync("route.exe", routeArgs);
                    }

                    ExecuteProcessSync("net.exe", "stop dnscache");
                    ExecuteProcessSync("net.exe", "start dnscache");
                }
                else
                {
                    Logger.Error(string.Format("Connection '{0}' failed to connect", connection.Name));
                    return false;
                }
            }
            catch (Exception ex)
            {
                Logger.ErrorException(string.Format("Connection '{0}' failed to connect", connection.Name), ex);
                return false;
            }

            Logger.Info(string.Format("Connection '{0}' connected successfully", connection.Name));

            return true;
        }
Beispiel #3
0
        public bool Disconnect(Connection connection)
        {
            try
            {
                var arguments = string.Format("{0} /DISCONNECT", connection.Name);

                ExecuteProcessSync("rasdial.exe", arguments);
                Logger.Info(string.Format("Connection '{0}' disconnected successfully", connection.Name));
                return true;
            }
            catch (Exception ex)
            {
                Logger.ErrorException(string.Format("Connection '{0}' failed to disconnect successfully", connection.Name), ex);
                return false;
            }
        }
Beispiel #4
0
        private MenuItem GetMenuItemForConnection(Connection connection)
        {
            var menuItem = new MenuItem
            {
                Name = connection.Name,
                Text = connection.Name
            };

            menuItem.Popup += MenuItemPopup;
            var connectMenuItem = new MenuItem(MenuItems.Connect) { Name = ConnectItemName };
            connectMenuItem.Click += ConnectMenuItemClick;

            var disconnectMenuItem = new MenuItem(MenuItems.Disconnect) { Name = DisconnectItemName };
            disconnectMenuItem.Click += DisconnectMenuItemClick;
            menuItem.MenuItems.Add(connectMenuItem);
            menuItem.MenuItems.Add(disconnectMenuItem);
            return menuItem;
        }
Beispiel #5
0
        public bool CheckConnection(Connection connection)
        {
            if (connection == null)
            {
                throw new ArgumentNullException();
            }

            var connectedNetIf = NetworkInterface.GetAllNetworkInterfaces().SingleOrDefault(n => n.Name == connection.Name);
            return connectedNetIf != null;
        }