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; }
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; }
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; } }
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; }
public bool CheckConnection(Connection connection) { if (connection == null) { throw new ArgumentNullException(); } var connectedNetIf = NetworkInterface.GetAllNetworkInterfaces().SingleOrDefault(n => n.Name == connection.Name); return connectedNetIf != null; }