Esempio n. 1
0
        private static void AddGeneralProperties(IHeaders props, XmlElement item)
        {
            string prop;
              var ownerDocument = item.OwnerDocument;
              if (ownerDocument == null) {
            throw new ArgumentNullException(nameof(item));
              }
              if (props.TryGetValue("DateO", out prop)) {
            var e = ownerDocument.CreateElement("dc", "date", NS_DC);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Genre", out prop)) {
            var e = ownerDocument.CreateElement("upnp", "genre", NS_UPNP);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Description", out prop)) {
            var e = ownerDocument.CreateElement("dc", "description", NS_DC);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Artist", out prop)) {
            var e = ownerDocument.CreateElement("upnp", "artist", NS_UPNP);
            e.SetAttribute("role", "AlbumArtist");
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Performer", out prop)) {
            var e = ownerDocument.CreateElement("upnp", "artist", NS_UPNP);
            e.SetAttribute("role", "Performer");
            e.InnerText = prop;
            item.AppendChild(e);
            e = ownerDocument.CreateElement("dc", "creator", NS_DC);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Album", out prop)) {
            var e = ownerDocument.CreateElement("upnp", "album", NS_UPNP);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Track", out prop)) {
            var e = ownerDocument.CreateElement(
              "upnp", "originalTrackNumber", NS_UPNP);
            e.InnerText = prop;
            item.AppendChild(e);
              }
              if (props.TryGetValue("Creator", out prop)) {
            var e = ownerDocument.CreateElement("dc", "creator", NS_DC);
            e.InnerText = prop;
            item.AppendChild(e);
              }

              if (props.TryGetValue("Director", out prop)) {
            var e = ownerDocument.CreateElement("upnp", "director", NS_UPNP);
            e.InnerText = prop;
            item.AppendChild(e);
              }
        }
Esempio n. 2
0
        private Stream ProcessRanges(IResponse rangedResponse, ref HttpCode status)
        {
            var responseBody  = rangedResponse.Body;
            var contentLength = GetContentLengthFromStream(responseBody);

            try {
                string ar;
                if (status != HttpCode.Ok && contentLength > 0 ||
                    !headers.TryGetValue("Range", out ar))
                {
                    return(responseBody);
                }
                var m = bytes.Match(ar);
                if (!m.Success)
                {
                    throw new InvalidDataException("Not parsed!");
                }
                var totalLength = contentLength;
                var start       = 0L;
                var end         = totalLength - 1;
                if (!long.TryParse(m.Groups[1].Value, out start) || start < 0)
                {
                    throw new InvalidDataException("Not parsed");
                }
                if (m.Groups.Count != 3 ||
                    !long.TryParse(m.Groups[2].Value, out end) ||
                    end <= start || end >= totalLength)
                {
                    end = totalLength - 1;
                }
                if (start >= end)
                {
                    responseBody.Close();
                    rangedResponse = Error416.HandleRequest(this);
                    return(rangedResponse.Body);
                }

                if (start > 0)
                {
                    responseBody.Seek(start, SeekOrigin.Current);
                }
                contentLength = end - start + 1;
                rangedResponse.Headers["Content-Length"] = contentLength.ToString();
                rangedResponse.Headers.Add(
                    "Content-Range",
                    String.Format("bytes {0}-{1}/{2}", start, end, totalLength)
                    );
                status = HttpCode.Partial;
            }
            catch (Exception ex) {
                _logger.Warn(String.Format(
                                 "{0} - Failed to process range request!", this), ex);
            }
            return(responseBody);
        }
        public bool Authorize(IHeaders headers, IPEndPoint ep, string mac)
        {
            if (headers == null)
            {
                throw new ArgumentNullException("headers");
            }
            string ua;

            if (!headers.TryGetValue("User-Agent", out ua))
            {
                return(false);
            }
            if (string.IsNullOrEmpty(ua))
            {
                return(false);
            }
            var rv = userAgents.ContainsKey(ua);

            if (!rv)
            {
                DebugFormat("Rejecting {0}. Not in User-Agent whitelist", ua);
            }
            else
            {
                DebugFormat("Accepted {0} via User-Agent whitelist", ua);
            }
            return(rv);
        }
 public HttpRequestAuthParameters(IHeaders headers, IPEndPoint endPoint)
 {
     if (headers != null) {
     headers.TryGetValue("User-Agent", out _userAgent);
       }
       if (endPoint != null) {
     _address = endPoint.Address;
     _mac = IP.GetMAC(_address);
       }
 }
Esempio n. 5
0
 public HttpRequestAuthParameters(IHeaders headers, IPEndPoint endPoint)
 {
     if (headers != null)
     {
         headers.TryGetValue("User-Agent", out _userAgent);
     }
     if (endPoint != null)
     {
         _address = endPoint.Address;
         _mac     = IP.GetMAC(_address);
     }
 }
Esempio n. 6
0
 public bool Authorize(IHeaders headers, IPEndPoint endPoint, string mac)
 {
     if (headers == null) {
     throw new ArgumentNullException(nameof(headers));
       }
       string ua;
       if (!headers.TryGetValue("User-Agent", out ua)) {
     return false;
       }
       if (string.IsNullOrEmpty(ua)) {
     return false;
       }
       var rv = userAgents.ContainsKey(ua);
       DebugFormat(!rv ? "Rejecting {0}. Not in User-Agent whitelist" : "Accepted {0} via User-Agent whitelist", ua);
       return rv;
 }
Esempio n. 7
0
        public bool Authorize(IHeaders headers, IPEndPoint endPoint)
        {
            if (headers == null)
            {
                throw new ArgumentNullException(nameof(headers));
            }
            string ua;

            if (!headers.TryGetValue("User-Agent", out ua))
            {
                return(false);
            }
            if (string.IsNullOrEmpty(ua))
            {
                return(false);
            }
            var rv = userAgents.ContainsKey(ua);

            Trace.WriteLine(!rv ? $"Rejecting {ua}. Not in User-Agent whitelist" : $"Accepted {ua} via User-Agent whitelist");
            return(rv);
        }
Esempio n. 8
0
        private static void AddGeneralProperties(IHeaders props, XmlElement item)
        {
            string prop;
            var    ownerDocument = item.OwnerDocument;

            if (ownerDocument == null)
            {
                throw new ArgumentNullException(nameof(item));
            }
            if (props.TryGetValue("DateO", out prop))
            {
                var e = ownerDocument.CreateElement("dc", "date", NS_DC);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Genre", out prop))
            {
                var e = ownerDocument.CreateElement("upnp", "genre", NS_UPNP);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Description", out prop))
            {
                var e = ownerDocument.CreateElement("dc", "description", NS_DC);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Artist", out prop))
            {
                var e = ownerDocument.CreateElement("upnp", "artist", NS_UPNP);
                e.SetAttribute("role", "AlbumArtist");
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Performer", out prop))
            {
                var e = ownerDocument.CreateElement("upnp", "artist", NS_UPNP);
                e.SetAttribute("role", "Performer");
                e.InnerText = prop;
                item.AppendChild(e);
                e           = ownerDocument.CreateElement("dc", "creator", NS_DC);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Album", out prop))
            {
                var e = ownerDocument.CreateElement("upnp", "album", NS_UPNP);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Track", out prop))
            {
                var e = ownerDocument.CreateElement(
                    "upnp", "originalTrackNumber", NS_UPNP);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Creator", out prop))
            {
                var e = ownerDocument.CreateElement("dc", "creator", NS_DC);
                e.InnerText = prop;
                item.AppendChild(e);
            }

            if (props.TryGetValue("Director", out prop))
            {
                var e = ownerDocument.CreateElement("upnp", "director", NS_UPNP);
                e.InnerText = prop;
                item.AppendChild(e);
            }
        }
Esempio n. 9
0
        private void SendResponse()
        {
            var responseBody = response.Body;
            var st           = response.Status;

            var contentLength = GetContentLengthFromStream(responseBody);

            string ar;

            if (st == HttpCodes.OK && contentLength > 0 && headers.TryGetValue("Range", out ar))
            {
                try {
                    var m = bytes.Match(ar);
                    if (!m.Success)
                    {
                        throw new InvalidDataException("Not parsed!");
                    }
                    var totalLength = contentLength;
                    var start       = 0L;
                    var end         = totalLength - 1;
                    if (!long.TryParse(m.Groups[1].Value, out start) || start < 0)
                    {
                        throw new InvalidDataException("Not parsed");
                    }
                    if (m.Groups.Count != 3 || !long.TryParse(m.Groups[2].Value, out end) || end <= start || end >= totalLength)
                    {
                        end = totalLength - 1;
                    }
                    if (start >= end)
                    {
                        responseBody.Close();
                        response = Error416.HandleRequest(this);
                        SendResponse();
                        return;
                    }

                    if (start > 0)
                    {
                        responseBody.Seek(start, SeekOrigin.Current);
                    }
                    contentLength = end - start + 1;
                    response.Headers["Content-Length"] = contentLength.ToString();
                    response.Headers.Add("Content-Range", String.Format("bytes {0}-{1}/{2}", start, end, totalLength));
                    st = HttpCodes.PARTIAL;
                }
                catch (Exception ex) {
                    Warn(String.Format("{0} - Failed to process range request!", this), ex);
                }
            }

            var hb = new StringBuilder();

            hb.AppendFormat("HTTP/1.1 {0} {1}\r\n", (uint)st, HttpPhrases.Phrases[st]);
            hb.Append(response.Headers.HeaderBlock);
            hb.Append("\r\n");

            var rs = new ConcatenatedStream();

            try {
                var headerStream = new MemoryStream(Encoding.ASCII.GetBytes(hb.ToString()));
                rs.AddStream(headerStream);
                if (method != "HEAD" && responseBody != null)
                {
                    rs.AddStream(responseBody);
                }
                InfoFormat("{0} - {1} response for {2}", this, (uint)st, path);
                state = HttpStates.WRITING;
                new StreamPump(rs, stream, (pump, result) =>
                {
                    pump.Input.Close();
                    pump.Input.Dispose();
                    if (result == StreamPumpResult.Delivered)
                    {
                        DebugFormat("{0} - Done writing response", this);

                        string conn;
                        if (headers.TryGetValue("connection", out conn) && conn.ToLower() == "keep-alive")
                        {
                            ReadNext();
                            return;
                        }
                    }
                    Close();
                }, BUFFER_SIZE);
            }
            catch (Exception) {
                rs.Dispose();
                throw;
            }
        }