diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-27 21:07:40 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-27 21:07:40 -0400 |
| commit | ce043225c4096b2082bdf351bd5d59848f4eb533 (patch) | |
| tree | 2978843a59e7df933451a438226c7a91497e9bce /Mono.Nat/Upnp/Mappers/UpnpMapper.cs | |
| parent | 8e57296f6986f13578f37647640fcaf49c9981f1 (diff) | |
update port mapper
Diffstat (limited to 'Mono.Nat/Upnp/Mappers/UpnpMapper.cs')
| -rw-r--r-- | Mono.Nat/Upnp/Mappers/UpnpMapper.cs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/Mono.Nat/Upnp/Mappers/UpnpMapper.cs b/Mono.Nat/Upnp/Mappers/UpnpMapper.cs index 9169d3f40..ddacb4b11 100644 --- a/Mono.Nat/Upnp/Mappers/UpnpMapper.cs +++ b/Mono.Nat/Upnp/Mappers/UpnpMapper.cs @@ -32,19 +32,20 @@ using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; namespace Mono.Nat.Upnp.Mappers { internal class UpnpMapper : Upnp, IMapper { - public event EventHandler<DeviceEventArgs> DeviceFound; public UdpClient Client { get; set; } - public UpnpMapper(ILogger logger) - : base(logger) + public UpnpMapper(ILogger logger, IHttpClient httpClient) + : base(logger, httpClient) { //Bind to local port 1900 for ssdp responses Client = new UdpClient(1900); @@ -60,7 +61,7 @@ namespace Mono.Nat.Upnp.Mappers new Thread(Receive).Start(); } - public void Receive() + public async void Receive() { while (true) { @@ -69,28 +70,36 @@ namespace Mono.Nat.Upnp.Mappers { IPAddress localAddress = ((IPEndPoint)Client.Client.LocalEndPoint).Address; byte[] data = Client.Receive(ref received); - Handle(localAddress, data, received); + + await Handle(localAddress, data, received); } } } public void Handle(IPAddress localAddres, byte[] response) { - Handle(localAddres, response, null); } - public void Handle(IPAddress localAddress, byte[] response, IPEndPoint endpoint) + public override async Task<UpnpNatDevice> Handle(IPAddress localAddress, byte[] response, IPEndPoint endpoint) { // No matter what, this method should never throw an exception. If something goes wrong // we should still be in a position to handle the next reply correctly. try { - UpnpNatDevice d = base.Handle(localAddress, response, endpoint); - d.GetServicesList(DeviceSetupComplete); + var d = await base.Handle(localAddress, response, endpoint).ConfigureAwait(false); + var result = await d.GetServicesList().ConfigureAwait(false); + + if (result) + { + DeviceSetupComplete(d); + } + + return d; } catch (Exception ex) { Logger.ErrorException("Error mapping port. Data string: {0}", ex, Encoding.UTF8.GetString(response)); + return null; } } |
