diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-23 12:54:51 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-23 12:54:51 -0500 |
| commit | 465f0cc1e2e4fc50a0adbef79a4a317eec5eb454 (patch) | |
| tree | 1379228a1c9ae8e3d54655e24e5bb31e3a08e128 /MediaBrowser.Common/Net | |
| parent | 17c1fd576057bdd2d6aea517d733fe8af6e6b2ba (diff) | |
moved some network code to the networking assembly
Diffstat (limited to 'MediaBrowser.Common/Net')
| -rw-r--r-- | MediaBrowser.Common/Net/HttpManager.cs | 33 | ||||
| -rw-r--r-- | MediaBrowser.Common/Net/INetworkManager.cs | 72 | ||||
| -rw-r--r-- | MediaBrowser.Common/Net/NetUtils.cs | 219 |
3 files changed, 99 insertions, 225 deletions
diff --git a/MediaBrowser.Common/Net/HttpManager.cs b/MediaBrowser.Common/Net/HttpManager.cs index 1deffba69..180843e0f 100644 --- a/MediaBrowser.Common/Net/HttpManager.cs +++ b/MediaBrowser.Common/Net/HttpManager.cs @@ -19,7 +19,7 @@ namespace MediaBrowser.Common.Net /// <summary> /// Class HttpManager /// </summary> - public class HttpManager : BaseManager<IKernel> + public class HttpManager : IDisposable { /// <summary> /// The _logger @@ -27,14 +27,28 @@ namespace MediaBrowser.Common.Net private readonly ILogger _logger; /// <summary> + /// The _kernel + /// </summary> + private readonly IKernel _kernel; + + /// <summary> /// Initializes a new instance of the <see cref="HttpManager" /> class. /// </summary> /// <param name="kernel">The kernel.</param> /// <param name="logger">The logger.</param> public HttpManager(IKernel kernel, ILogger logger) - : base(kernel) { + if (kernel == null) + { + throw new ArgumentNullException("kernel"); + } + if (logger == null) + { + throw new ArgumentNullException("logger"); + } + _logger = logger; + _kernel = kernel; } /// <summary> @@ -196,7 +210,7 @@ namespace MediaBrowser.Common.Net cancellationToken.ThrowIfCancellationRequested(); - var tempFile = Path.Combine(Kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".tmp"); + var tempFile = Path.Combine(_kernel.ApplicationPaths.TempDirectory, Guid.NewGuid() + ".tmp"); var message = new HttpRequestMessage(HttpMethod.Get, url); @@ -403,10 +417,19 @@ namespace MediaBrowser.Common.Net } /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected override void Dispose(bool dispose) + protected virtual void Dispose(bool dispose) { if (dispose) { @@ -417,8 +440,6 @@ namespace MediaBrowser.Common.Net _httpClients.Clear(); } - - base.Dispose(dispose); } /// <summary> diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs new file mode 100644 index 000000000..7f6bfe152 --- /dev/null +++ b/MediaBrowser.Common/Net/INetworkManager.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using MediaBrowser.Model.Net; + +namespace MediaBrowser.Common.Net +{ + public interface INetworkManager + { + /// <summary> + /// Gets the machine's local ip address + /// </summary> + /// <returns>IPAddress.</returns> + string GetLocalIpAddress(); + + /// <summary> + /// Gets a random port number that is currently available + /// </summary> + /// <returns>System.Int32.</returns> + int GetRandomUnusedPort(); + + /// <summary> + /// Creates the netsh URL registration. + /// </summary> + void AuthorizeHttpListening(string url); + + /// <summary> + /// Adds the windows firewall rule. + /// </summary> + /// <param name="port">The port.</param> + /// <param name="protocol">The protocol.</param> + void AddSystemFirewallRule(int port, NetworkProtocol protocol); + + /// <summary> + /// Removes the windows firewall rule. + /// </summary> + /// <param name="port">The port.</param> + /// <param name="protocol">The protocol.</param> + void RemoveSystemFirewallRule(int port, NetworkProtocol protocol); + + /// <summary> + /// Returns MAC Address from first Network Card in Computer + /// </summary> + /// <returns>[string] MAC Address</returns> + string GetMacAddress(); + + /// <summary> + /// Gets available devices within the domain + /// </summary> + /// <returns>PC's in the Domain</returns> + IEnumerable<string> GetNetworkDevices(); + + /// <summary> + /// Gets the network shares. + /// </summary> + /// <param name="path">The path.</param> + /// <returns>IEnumerable{NetworkShare}.</returns> + IEnumerable<NetworkShare> GetNetworkShares(string path); + } + /// <summary> + /// Enum NetworkProtocol + /// </summary> + public enum NetworkProtocol + { + /// <summary> + /// The TCP + /// </summary> + Tcp, + /// <summary> + /// The UDP + /// </summary> + Udp + } +}
\ No newline at end of file diff --git a/MediaBrowser.Common/Net/NetUtils.cs b/MediaBrowser.Common/Net/NetUtils.cs deleted file mode 100644 index eb50a879d..000000000 --- a/MediaBrowser.Common/Net/NetUtils.cs +++ /dev/null @@ -1,219 +0,0 @@ -using MediaBrowser.Common.Win32; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Management; -using System.Net; -using System.Net.Sockets; -using System.Runtime.InteropServices; - -namespace MediaBrowser.Common.Net -{ - /// <summary> - /// Class NetUtils - /// </summary> - public static class NetUtils - { - /// <summary> - /// Gets the machine's local ip address - /// </summary> - /// <returns>IPAddress.</returns> - public static IPAddress GetLocalIpAddress() - { - var host = Dns.GetHostEntry(Dns.GetHostName()); - - return host.AddressList.FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork); - } - - /// <summary> - /// Gets a random port number that is currently available - /// </summary> - /// <returns>System.Int32.</returns> - public static int GetRandomUnusedPort() - { - var listener = new TcpListener(IPAddress.Any, 0); - listener.Start(); - var port = ((IPEndPoint)listener.LocalEndpoint).Port; - listener.Stop(); - return port; - } - - /// <summary> - /// Creates the netsh URL registration. - /// </summary> - /// <param name="urlPrefix">The URL prefix.</param> - public static void CreateNetshUrlRegistration(string urlPrefix) - { - var startInfo = new ProcessStartInfo - { - FileName = "netsh", - Arguments = string.Format("http add urlacl url={0} user=\"NT AUTHORITY\\Authenticated Users\"", urlPrefix), - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden, - Verb = "runas", - ErrorDialog = false - }; - - using (var process = Process.Start(startInfo)) - { - process.WaitForExit(); - } - } - - /// <summary> - /// Adds the windows firewall rule. - /// </summary> - /// <param name="port">The port.</param> - /// <param name="protocol">The protocol.</param> - public static void AddWindowsFirewallRule(int port, NetworkProtocol protocol) - { - // First try to remove it so we don't end up creating duplicates - RemoveWindowsFirewallRule(port, protocol); - - var args = string.Format("advfirewall firewall add rule name=\"Port {0}\" dir=in action=allow protocol={1} localport={0}", port, protocol); - - RunNetsh(args); - } - - /// <summary> - /// Removes the windows firewall rule. - /// </summary> - /// <param name="port">The port.</param> - /// <param name="protocol">The protocol.</param> - public static void RemoveWindowsFirewallRule(int port, NetworkProtocol protocol) - { - var args = string.Format("advfirewall firewall delete rule name=\"Port {0}\" protocol={1} localport={0}", port, protocol); - - RunNetsh(args); - } - - /// <summary> - /// Runs the netsh. - /// </summary> - /// <param name="args">The args.</param> - private static void RunNetsh(string args) - { - var startInfo = new ProcessStartInfo - { - FileName = "netsh", - Arguments = args, - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden, - Verb = "runas", - ErrorDialog = false - }; - - using (var process = new Process { StartInfo = startInfo }) - { - process.Start(); - process.WaitForExit(); - } - } - - /// <summary> - /// Returns MAC Address from first Network Card in Computer - /// </summary> - /// <returns>[string] MAC Address</returns> - public static string GetMacAddress() - { - var mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); - var moc = mc.GetInstances(); - var macAddress = String.Empty; - foreach (ManagementObject mo in moc) - { - if (macAddress == String.Empty) // only return MAC Address from first card - { - try - { - if ((bool)mo["IPEnabled"]) macAddress = mo["MacAddress"].ToString(); - } - catch - { - mo.Dispose(); - return ""; - } - } - mo.Dispose(); - } - - return macAddress.Replace(":", ""); - } - - /// <summary> - /// Uses the DllImport : NetServerEnum with all its required parameters - /// (see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp - /// for full details or method signature) to retrieve a list of domain SV_TYPE_WORKSTATION - /// and SV_TYPE_SERVER PC's - /// </summary> - /// <returns>Arraylist that represents all the SV_TYPE_WORKSTATION and SV_TYPE_SERVER - /// PC's in the Domain</returns> - public static IEnumerable<string> GetNetworkComputers() - { - //local fields - const int MAX_PREFERRED_LENGTH = -1; - var SV_TYPE_WORKSTATION = 1; - var SV_TYPE_SERVER = 2; - var buffer = IntPtr.Zero; - var tmpBuffer = IntPtr.Zero; - var entriesRead = 0; - var totalEntries = 0; - var resHandle = 0; - var sizeofINFO = Marshal.SizeOf(typeof(_SERVER_INFO_100)); - - try - { - //call the DllImport : NetServerEnum with all its required parameters - //see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp - //for full details of method signature - var ret = NativeMethods.NetServerEnum(null, 100, ref buffer, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out resHandle); - - //if the returned with a NERR_Success (C++ term), =0 for C# - if (ret == 0) - { - //loop through all SV_TYPE_WORKSTATION and SV_TYPE_SERVER PC's - for (var i = 0; i < totalEntries; i++) - { - //get pointer to, Pointer to the buffer that received the data from - //the call to NetServerEnum. Must ensure to use correct size of - //STRUCTURE to ensure correct location in memory is pointed to - tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO)); - //Have now got a pointer to the list of SV_TYPE_WORKSTATION and - //SV_TYPE_SERVER PC's, which is unmanaged memory - //Needs to Marshal data from an unmanaged block of memory to a - //managed object, again using STRUCTURE to ensure the correct data - //is marshalled - var svrInfo = (_SERVER_INFO_100)Marshal.PtrToStructure(tmpBuffer, typeof(_SERVER_INFO_100)); - - //add the PC names to the ArrayList - if (!string.IsNullOrEmpty(svrInfo.sv100_name)) - { - yield return svrInfo.sv100_name; - } - } - } - } - finally - { - //The NetApiBufferFree function frees - //the memory that the NetApiBufferAllocate function allocates - NativeMethods.NetApiBufferFree(buffer); - } - } - } - - /// <summary> - /// Enum NetworkProtocol - /// </summary> - public enum NetworkProtocol - { - /// <summary> - /// The TCP - /// </summary> - Tcp, - /// <summary> - /// The UDP - /// </summary> - Udp - } -} |
