예제 #1
0
        /// <summary>
        /// Respuesta 200
        /// Se debe de llamar ANTES de empezar a escribir en el stream de respuesta
        /// Se enviarán todos los headers incluidos en ResponseHeaders
        /// </summary>
        public void WriteOkResponse()
        {
            string type = "text/html";

            if (ResponseHeaders.ContainsKey("Content-Type"))
            {
                type = ResponseHeaders["Content-Type"];
                ResponseHeaders.Remove("Content-Type");
            }

            if (ResponseHeaders.ContainsKey("Connection"))
            {
                ResponseHeaders.Remove("Connection");
            }

            var headersList = ResponseHeaders.ToList();

            if (RequestHeaders.ContainsKey("Host"))
            {
                foreach (var cookie in Cookies)
                {
                    headersList.Add(new KeyValuePair <string, string>("Set-Cookie", cookie.Key + "=" + cookie.Value + "; domain=." + RequestHeaders["Host"]));
                }
            }

            Processor.WriteSuccess(type, headersList);
        }
        private StreamedDataBlock GetStreamedBlockImpl(string actionUri, string transferId, long blockNumber)
        {
            //run request and get response stream
            var    response = Util.RunRequest(ServiceBaseUri, c => c.Get(actionUri));
            Stream stream   = response.Content.ReadAsStream();

            //get meta data from headers
            ResponseHeaders headers = response.Headers;

            var offset      = long.Parse(headers[VfsHttpHeaders.Default.BlockOffset], CultureInfo.InvariantCulture);
            var isLastBlock = bool.Parse(headers[VfsHttpHeaders.Default.IsLastBlock]);

            int?blockLength = null;

            if (headers.ContainsKey(VfsHttpHeaders.Default.BlockLength))
            {
                blockLength = int.Parse(headers[VfsHttpHeaders.Default.BlockLength], CultureInfo.InvariantCulture);
            }

            return(new StreamedDataBlock
            {
                BlockNumber = blockNumber,
                TransferTokenId = transferId,
                Data = stream,
                Offset = offset,
                BlockLength = blockLength,
                IsLastBlock = isLastBlock
            });
        }
예제 #3
0
        /// <summary>
        /// Respuesta manual
        /// Se debe de llamar ANTES de empezar a escribir en el stream de respuesta
        /// </summary>
        /// <param name="Code">Código de la respuesta</param>
        /// <param name="Headers">Headers adicionales</param>
        public void WriteCustomResponse(string Code)
        {
            if (!ResponseHeaders.ContainsKey("Connection"))
            {
                ResponseHeaders.Add("Connection", "close");
            }

            Processor.WriteResponseCode(Code, ResponseHeaders);
        }
예제 #4
0
        /// <summary>
        /// Respuesta 404
        /// Se debe de llamar ANTES de empezar a escribir en el stream de respuesta
        /// </summary>
        /// <param name="ContentType">Tipo de contenido, por defecto Html</param>
        /// <param name="Headers">Headers adicionales</param>
        public void WriteNotFoundResponse()
        {
            if (ResponseHeaders.ContainsKey("Connection"))
            {
                ResponseHeaders.Remove("Connection");
            }

            Processor.WriteNotFound(ResponseHeaders);
        }
        /// <summary>
        /// True if header exists
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public bool HeaderExists(string name)
        {
            if (ResponseHeaders.ContainsKey(name) ||
                NonUniqueResponseHeaders.ContainsKey(name))
            {
                return(true);
            }

            return(false);
        }
예제 #6
0
        public void SetResponseHeader(string headerName, string headerValue)
        {
            if (ResponseHeaders.ContainsKey(headerName))
            {
                ResponseHeaders[headerName][0] = headerValue;
                return;
            }
            ResponseHeaders.Add(headerName, new string[]
			{
				headerValue
			});
        }
예제 #7
0
        /// <summary>
        /// retrieves a specified response header, converting it to an int
        /// </summary>
        /// <param name="responseHeader">Response header to retrieve.</param>
        /// <returns>int value from response</returns>
        private int GetResponseHeaderAsInt(string responseHeader)
        {
            var headerVal = -1;

            if (ResponseHeaders != null &&
                ResponseHeaders.ContainsKey(responseHeader))
            {
                var headerValAsString = ResponseHeaders[responseHeader];

                int.TryParse(headerValAsString, out headerVal);
            }

            return(headerVal);
        }
        /// <summary>
        ///  removes all headers with given name
        /// </summary>
        /// <param name="headerName"></param>
        /// <returns>True if header was removed
        /// False if no header exists with given name</returns>
        public bool RemoveHeader(string headerName)
        {
            if (ResponseHeaders.ContainsKey(headerName))
            {
                ResponseHeaders.Remove(headerName);
                return(true);
            }
            else if (NonUniqueResponseHeaders.ContainsKey(headerName))
            {
                NonUniqueResponseHeaders.Remove(headerName);
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Returns all headers with given name if exists
        /// Returns null if does'nt exist
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public List <HttpHeader> GetHeaders(string name)
        {
            if (ResponseHeaders.ContainsKey(name))
            {
                return(new List <HttpHeader>()
                {
                    ResponseHeaders[name]
                });
            }
            else if (NonUniqueResponseHeaders.ContainsKey(name))
            {
                return(new List <HttpHeader>(NonUniqueResponseHeaders[name]));
            }

            return(null);
        }
예제 #10
0
 Task <Stream> IHttpUpgradeFeature.UpgradeAsync()
 {
     StatusCode   = 101;
     ReasonPhrase = "Switching Protocols";
     ResponseHeaders["Connection"] = "Upgrade";
     if (!ResponseHeaders.ContainsKey("Upgrade"))
     {
         StringValues values;
         if (RequestHeaders.TryGetValue("Upgrade", out values))
         {
             ResponseHeaders["Upgrade"] = values;
         }
     }
     ProduceStartAndFireOnStarting(immediate: true).GetAwaiter().GetResult();
     return(Task.FromResult(DuplexStream));
 }
예제 #11
0
        async Task <Stream> IHttpUpgradeFeature.UpgradeAsync()
        {
            StatusCode   = 101;
            ReasonPhrase = "Switching Protocols";
            ResponseHeaders["Connection"] = "Upgrade";
            if (!ResponseHeaders.ContainsKey("Upgrade"))
            {
                StringValues values;
                if (RequestHeaders.TryGetValue("Upgrade", out values))
                {
                    ResponseHeaders["Upgrade"] = values;
                }
            }

            await FlushAsync(default(CancellationToken));

            return(DuplexStream);
        }
        /// <summary>
        /// Removes given header object if it exist
        /// </summary>
        /// <param name="header">Returns true if header exists and was removed </param>
        public bool RemoveHeader(HttpHeader header)
        {
            if (ResponseHeaders.ContainsKey(header.Name))
            {
                if (ResponseHeaders[header.Name].Equals(header))
                {
                    ResponseHeaders.Remove(header.Name);
                    return(true);
                }
            }
            else if (NonUniqueResponseHeaders.ContainsKey(header.Name))
            {
                if (NonUniqueResponseHeaders[header.Name]
                    .RemoveAll(x => x.Equals(header)) > 0)
                {
                    return(true);
                }
            }

            return(false);
        }
        async Task <Stream> IHttpUpgradeFeature.UpgradeAsync()
        {
            if (!((IHttpUpgradeFeature)this).IsUpgradableRequest)
            {
                throw new InvalidOperationException(CoreStrings.CannotUpgradeNonUpgradableRequest);
            }

            if (IsUpgraded)
            {
                throw new InvalidOperationException(CoreStrings.UpgradeCannotBeCalledMultipleTimes);
            }

            if (!ServiceContext.ConnectionManager.UpgradedConnectionCount.TryLockOne())
            {
                throw new InvalidOperationException(CoreStrings.UpgradedConnectionLimitReached);
            }

            IsUpgraded = true;

            ConnectionFeatures.Get <IDecrementConcurrentConnectionCountFeature>()?.ReleaseConnection();

            StatusCode   = StatusCodes.Status101SwitchingProtocols;
            ReasonPhrase = "Switching Protocols";
            ResponseHeaders["Connection"] = "Upgrade";
            if (!ResponseHeaders.ContainsKey("Upgrade"))
            {
                StringValues values;
                if (RequestHeaders.TryGetValue("Upgrade", out values))
                {
                    ResponseHeaders["Upgrade"] = values;
                }
            }

            await FlushAsync(default(CancellationToken));

            return(_streams.Upgrade());
        }
        /// <summary>
        /// Adds the given header object to Response
        /// </summary>
        /// <param name="newHeader"></param>
        public void AddHeader(HttpHeader newHeader)
        {
            if (NonUniqueResponseHeaders.ContainsKey(newHeader.Name))
            {
                NonUniqueResponseHeaders[newHeader.Name].Add(newHeader);
                return;
            }

            if (ResponseHeaders.ContainsKey(newHeader.Name))
            {
                var existing = ResponseHeaders[newHeader.Name];
                ResponseHeaders.Remove(newHeader.Name);

                NonUniqueResponseHeaders.Add(newHeader.Name,
                                             new List <HttpHeader>()
                {
                    existing, newHeader
                });
            }
            else
            {
                ResponseHeaders.Add(newHeader.Name, newHeader);
            }
        }
예제 #15
0
 public bool IsHeaderPresent(string headerName)
 {
     return(ResponseHeaders.ContainsKey(headerName));
 }