aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Dlna/Ssdp/SsdpHandler.cs')
-rw-r--r--MediaBrowser.Dlna/Ssdp/SsdpHandler.cs61
1 files changed, 18 insertions, 43 deletions
diff --git a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
index 01393c6ce..ad7626f32 100644
--- a/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
+++ b/MediaBrowser.Dlna/Ssdp/SsdpHandler.cs
@@ -1,14 +1,13 @@
-using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Common.Events;
+using MediaBrowser.Controller.Configuration;
using MediaBrowser.Dlna.Server;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
-using System.Text;
using System.Threading;
namespace MediaBrowser.Dlna.Ssdp
@@ -29,13 +28,13 @@ namespace MediaBrowser.Dlna.Ssdp
private Timer _queueTimer;
private Timer _notificationTimer;
-
+
private readonly AutoResetEvent _datagramPosted = new AutoResetEvent(false);
private readonly ConcurrentQueue<Datagram> _messageQueue = new ConcurrentQueue<Datagram>();
private bool _isDisposed;
private readonly ConcurrentDictionary<Guid, List<UpnpDevice>> _devices = new ConcurrentDictionary<Guid, List<UpnpDevice>>();
-
+
public SsdpHandler(ILogger logger, IServerConfigurationManager config, string serverSignature)
{
_logger = logger;
@@ -51,6 +50,8 @@ namespace MediaBrowser.Dlna.Ssdp
{
RespondToSearch(args.EndPoint, args.Headers["st"]);
}
+
+ EventHelper.FireEventIfNotNull(MessageReceived, this, args, _logger);
}
public IEnumerable<UpnpDevice> RegisteredDevices
@@ -60,7 +61,7 @@ namespace MediaBrowser.Dlna.Ssdp
return _devices.Values.SelectMany(i => i).ToList();
}
}
-
+
public void Start()
{
_socket = CreateMulticastSocket();
@@ -79,8 +80,8 @@ namespace MediaBrowser.Dlna.Ssdp
SendDatagram(header, values, _ssdpEndp, localAddress, sendCount);
}
- public void SendDatagram(string header,
- Dictionary<string, string> values,
+ public void SendDatagram(string header,
+ Dictionary<string, string> values,
IPEndPoint endpoint,
IPAddress localAddress,
int sendCount = 1)
@@ -105,7 +106,7 @@ namespace MediaBrowser.Dlna.Ssdp
{
foreach (var d in RegisteredDevices)
{
- if (string.Equals(deviceType, "ssdp:all", StringComparison.OrdinalIgnoreCase) ||
+ if (string.Equals(deviceType, "ssdp:all", StringComparison.OrdinalIgnoreCase) ||
string.Equals(deviceType, d.Type, StringComparison.OrdinalIgnoreCase))
{
SendDatagram(header, values, endpoint, d.Address);
@@ -141,7 +142,7 @@ namespace MediaBrowser.Dlna.Ssdp
_logger.Info("{1} - Responded to a {0} request to {2}", d.Type, endpoint, d.Address.ToString());
}
- }
+ }
}
private readonly object _queueTimerSyncLock = new object();
@@ -223,43 +224,17 @@ namespace MediaBrowser.Dlna.Ssdp
var receivedCount = _socket.EndReceiveFrom(result, ref endpoint);
var received = (byte[])result.AsyncState;
- if (_config.Configuration.DlnaOptions.EnableDebugLogging)
- {
- _logger.Debug("{0} - SSDP Received a datagram", endpoint);
- }
+ var args = SsdpHelper.ParseSsdpResponse(received, (IPEndPoint)endpoint);
- using (var reader = new StreamReader(new MemoryStream(received), Encoding.ASCII))
+ if (_config.Configuration.DlnaOptions.EnableDebugLogging)
{
- var proto = (reader.ReadLine() ?? string.Empty).Trim();
- var method = proto.Split(new[] { ' ' }, 2)[0];
- var headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
- for (var line = reader.ReadLine(); line != null; line = reader.ReadLine())
- {
- line = line.Trim();
- if (string.IsNullOrEmpty(line))
- {
- break;
- }
- var parts = line.Split(new[] { ':' }, 2);
-
- if (parts.Length >= 2)
- {
- headers[parts[0]] = parts[1].Trim();
- }
- }
+ var headerTexts = args.Headers.Select(i => string.Format("{0}={1}", i.Key, i.Value));
+ var headerText = string.Join(",", headerTexts.ToArray());
- if (_config.Configuration.DlnaOptions.EnableDebugLogging)
- {
- _logger.Debug("{0} - Datagram method: {1}", endpoint, method);
- }
-
- OnMessageReceived(new SsdpMessageEventArgs
- {
- Method = method,
- Headers = headers,
- EndPoint = (IPEndPoint)endpoint
- });
+ _logger.Debug("{0} message received from {1}. Headers: {2}", args.Method, args.EndPoint, headerText);
}
+
+ OnMessageReceived(args);
}
catch (Exception ex)
{