| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | using System;using System.Collections.Generic;using System.IO;using System.Text;using MediaBrowser.Model.Net;using MediaBrowser.Model.Text;namespace RSSDP{    public class SsdpHelper    {        private readonly ITextEncoding _encoding;        public SsdpHelper(ITextEncoding encoding)        {            _encoding = encoding;        }        public SsdpMessageInfo ParseSsdpResponse(byte[] data)        {            using (var ms = new MemoryStream(data))            {                using (var reader = new StreamReader(ms, _encoding.GetASCIIEncoding()))                {                    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();                        }                    }                    return new SsdpMessageInfo                    {                        Method = method,                        Headers = headers,                        Message = data                    };                }            }        }        public static string BuildMessage(string header, Dictionary<string, string> values)        {            var builder = new StringBuilder();            const string argFormat = "{0}: {1}\r\n";            builder.AppendFormat("{0}\r\n", header);            foreach (var pair in values)            {                builder.AppendFormat(argFormat, pair.Key, pair.Value);            }            builder.Append("\r\n");            return builder.ToString();        }    }    public class SsdpMessageInfo    {        public string Method { get; set; }        public IpEndPointInfo EndPoint { get; set; }        public Dictionary<string, string> Headers { get; set; }        public IpEndPointInfo LocalEndPoint { get; set; }        public byte[] Message { get; set; }        public SsdpMessageInfo()        {            Headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);        }    }}
 |