SsdpHelper.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using MediaBrowser.Controller.Dlna;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Text;
  6. namespace MediaBrowser.Dlna.Ssdp
  7. {
  8. public class SsdpHelper
  9. {
  10. public static SsdpMessageEventArgs ParseSsdpResponse(byte[] data)
  11. {
  12. using (var ms = new MemoryStream(data))
  13. {
  14. using (var reader = new StreamReader(ms, Encoding.ASCII))
  15. {
  16. var proto = (reader.ReadLine() ?? string.Empty).Trim();
  17. var method = proto.Split(new[] { ' ' }, 2)[0];
  18. var headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
  19. for (var line = reader.ReadLine(); line != null; line = reader.ReadLine())
  20. {
  21. line = line.Trim();
  22. if (string.IsNullOrEmpty(line))
  23. {
  24. break;
  25. }
  26. var parts = line.Split(new[] { ':' }, 2);
  27. if (parts.Length >= 2)
  28. {
  29. headers[parts[0]] = parts[1].Trim();
  30. }
  31. }
  32. return new SsdpMessageEventArgs
  33. {
  34. Method = method,
  35. Headers = headers,
  36. Message = data
  37. };
  38. }
  39. }
  40. }
  41. }
  42. }