aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-09-03 13:19:49 -0400
committerGitHub <noreply@github.com>2016-09-03 13:19:49 -0400
commitc9ba91d7a5219180d237532a936ca3c742c76a61 (patch)
tree50b78c48ec58db7b69b0f26a42f38ac6c8a135d3 /MediaBrowser.Server.Implementations
parentf12204c6d54f8de8978e1c235674b17b1b0b0ad7 (diff)
parent2d7c82d0dd8b51af58a2e187ef30639fdbfd918a (diff)
Merge pull request #2137 from MediaBrowser/dev
Dev
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs15
-rw-r--r--MediaBrowser.Server.Implementations/Udp/UdpServer.cs65
2 files changed, 34 insertions, 46 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
index aefb29f1a6..4c6254330e 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs
@@ -54,14 +54,14 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
{
if (args.IsDirectory)
{
+ if (args.HasParent<Series>())
+ {
+ return null;
+ }
+
var collectionType = args.GetCollectionType();
if (string.Equals(collectionType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
{
- if (args.HasParent<Series>())
- {
- return null;
- }
-
var configuredContentType = _libraryManager.GetConfiguredContentType(args.Path);
if (!string.Equals(configuredContentType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
{
@@ -76,11 +76,6 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
{
if (string.IsNullOrWhiteSpace(collectionType))
{
- if (args.HasParent<Series>())
- {
- return null;
- }
-
if (args.Parent.IsRoot)
{
return null;
diff --git a/MediaBrowser.Server.Implementations/Udp/UdpServer.cs b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs
index 32992b9b27..241ceaf659 100644
--- a/MediaBrowser.Server.Implementations/Udp/UdpServer.cs
+++ b/MediaBrowser.Server.Implementations/Udp/UdpServer.cs
@@ -30,7 +30,7 @@ namespace MediaBrowser.Server.Implementations.Udp
private bool _isDisposed;
- private readonly List<Tuple<string, byte[], Action<string, Encoding>>> _responders = new List<Tuple<string, byte[], Action<string, Encoding>>>();
+ private readonly List<Tuple<string, bool, Func<string, string, Encoding, Task>>> _responders = new List<Tuple<string, bool, Func<string, string, Encoding, Task>>>();
private readonly IServerApplicationHost _appHost;
private readonly IJsonSerializer _json;
@@ -49,43 +49,35 @@ namespace MediaBrowser.Server.Implementations.Udp
_appHost = appHost;
_json = json;
- AddMessageResponder("who is EmbyServer?", RespondToV2Message);
- AddMessageResponder("who is MediaBrowserServer_v2?", RespondToV2Message);
- AddMessageResponder("who is MediaBrowserServer?", RespondToV1Message);
+ AddMessageResponder("who is EmbyServer?", true, RespondToV2Message);
+ AddMessageResponder("who is MediaBrowserServer_v2?", false, RespondToV2Message);
}
- private void AddMessageResponder(string message, Action<string, Encoding> responder)
+ private void AddMessageResponder(string message, bool isSubstring, Func<string, string, Encoding, Task> responder)
{
- var expectedMessageBytes = Encoding.UTF8.GetBytes(message);
-
- _responders.Add(new Tuple<string, byte[], Action<string, Encoding>>(message, expectedMessageBytes, responder));
+ _responders.Add(new Tuple<string, bool, Func<string, string, Encoding, Task>>(message, isSubstring, responder));
}
/// <summary>
/// Raises the <see cref="E:MessageReceived" /> event.
/// </summary>
/// <param name="e">The <see cref="UdpMessageReceivedEventArgs"/> instance containing the event data.</param>
- private void OnMessageReceived(UdpMessageReceivedEventArgs e)
+ private async void OnMessageReceived(UdpMessageReceivedEventArgs e)
{
- var responder = _responders.FirstOrDefault(i => i.Item2.SequenceEqual(e.Bytes));
var encoding = Encoding.UTF8;
+ var responder = GetResponder(e.Bytes, encoding);
if (responder == null)
{
- var text = Encoding.Unicode.GetString(e.Bytes);
- responder = _responders.FirstOrDefault(i => string.Equals(i.Item1, text, StringComparison.OrdinalIgnoreCase));
-
- if (responder != null)
- {
- encoding = Encoding.Unicode;
- }
+ encoding = Encoding.Unicode;
+ responder = GetResponder(e.Bytes, encoding);
}
if (responder != null)
{
try
{
- responder.Item3(e.RemoteEndPoint, encoding);
+ await responder.Item2.Item3(responder.Item1, e.RemoteEndPoint, encoding).ConfigureAwait(false);
}
catch (Exception ex)
{
@@ -94,33 +86,34 @@ namespace MediaBrowser.Server.Implementations.Udp
}
}
- private async void RespondToV1Message(string endpoint, Encoding encoding)
+ private Tuple<string, Tuple<string, bool, Func<string, string, Encoding, Task>>> GetResponder(byte[] bytes, Encoding encoding)
{
- var localUrl = await _appHost.GetLocalApiUrl().ConfigureAwait(false);
-
- if (!string.IsNullOrEmpty(localUrl))
+ var text = encoding.GetString(bytes);
+ var responder = _responders.FirstOrDefault(i =>
{
- // This is how we did the old v1 search, so need to strip off the protocol
- var index = localUrl.IndexOf("://", StringComparison.OrdinalIgnoreCase);
-
- if (index != -1)
+ if (i.Item2)
{
- localUrl = localUrl.Substring(index + 3);
+ return text.IndexOf(i.Item1, StringComparison.OrdinalIgnoreCase) != -1;
}
+ return string.Equals(i.Item1, text, StringComparison.OrdinalIgnoreCase);
+ });
- // Send a response back with our ip address and port
- var response = String.Format("MediaBrowserServer|{0}", localUrl);
-
- await SendAsync(Encoding.UTF8.GetBytes(response), endpoint);
- }
- else
+ if (responder == null)
{
- _logger.Warn("Unable to respond to udp request because the local ip address could not be determined.");
+ return null;
}
+ return new Tuple<string, Tuple<string, bool, Func<string, string, Encoding, Task>>>(text, responder);
}
- private async void RespondToV2Message(string endpoint, Encoding encoding)
+ private async Task RespondToV2Message(string messageText, string endpoint, Encoding encoding)
{
+ var parts = messageText.Split('|');
+
+ if (parts.Length > 1)
+ {
+ _appHost.EnableLoopback(parts[1]);
+ }
+
var localUrl = await _appHost.GetLocalApiUrl().ConfigureAwait(false);
if (!string.IsNullOrEmpty(localUrl))
@@ -132,7 +125,7 @@ namespace MediaBrowser.Server.Implementations.Udp
Name = _appHost.FriendlyName
};
- await SendAsync(encoding.GetBytes(_json.SerializeToString(response)), endpoint);
+ await SendAsync(encoding.GetBytes(_json.SerializeToString(response)), endpoint).ConfigureAwait(false);
}
else
{