public bool TryGetParam <T>(string key, out T value)
        {
            // try to find a parameter with matching name across the cookies, query parameters, request headers and extended properties
            if (QueryParams.TryGetValue(key, out var queryParamValue))
            {
                value = (T)queryParamValue;
                return(true);
            }

            if (RequestHeaders.TryGetValue(key, out var headerValue))
            {
                value = (T)headerValue;
                return(true);
            }

            if (Cookies.TryGetValue(key, out var cookieValue))
            {
                value = (T)cookieValue;
                return(true);
            }

            if (ExtendedProperties.TryGetValue(key, out var extendedValue))
            {
                value = (T)extendedValue;
                return(true);
            }

            // the parameter doesn't exist so return null/false
            value = default(T);
            return(false);
        }
        /// <inheritdoc />
        public override bool IsErrorResponse(HttpMessage message)
        {
            switch (message.Response.Status)
            {
            case 409:
                // We're not considering Container/BlobAlreadyExists as errors when the request has conditional headers.
                // Convenience methods like BlobContainerClient.CreateIfNotExists will cause a lot of these responses and
                // we don't want them polluting AppInsights with noise.  See RequestActivityPolicy for how this is applied.

                RequestHeaders header = message.Request.Headers;

                if (header.TryGetValue(Constants.HeaderNames.ErrorCode, out var error) &&
                    (error == Constants.ErrorCodes.ContainerAlreadyExists ||
                     error == Constants.ErrorCodes.BlobAlreadyExists))
                {
                    var isConditional =
                        header.Contains(HttpHeader.Names.IfMatch) ||
                        header.Contains(HttpHeader.Names.IfNoneMatch) ||
                        header.Contains(HttpHeader.Names.IfModifiedSince) ||
                        header.Contains(HttpHeader.Names.IfUnmodifiedSince);
                    return(!isConditional);
                }

                break;
            }

            return(base.IsErrorResponse(message));
        }
示例#3
0
        private string GetHeaderValue(string name)
        {
            string value;

            RequestHeaders.TryGetValue(name, out value);

            return(value);
        }
示例#4
0
 public string RequestHeader(string name)
 {
     string[] values;
     if (!RequestHeaders.TryGetValue(name, out values) ||
         values == null ||
         !values.Any())
     {
         return(null);
     }
     return(string.Join(",", values.ToArray()));
 }
 private static string GetSetContentTypeOrDefault(RequestHeaders headers)
 {
     string[] setContentTypeHeaders;
     if (headers.TryGetValue(SET_CONTENT_TYPE_HEADER_NAME, out setContentTypeHeaders) &&
         !string.IsNullOrWhiteSpace(setContentTypeHeaders[0]))
     {
         return(setContentTypeHeaders[0]);
     }
     else
     {
         return(DEFAULT_CONTENT_TYPE);
     }
 }
示例#6
0
 private void AddRequestHeader(string name, string value)
 {
     string[] existing;
     if (!RequestHeaders.TryGetValue(name, out existing) ||
         existing == null ||
         existing.Length == 0)
     {
         RequestHeaders[name] = new[] { value };
     }
     else
     {
         RequestHeaders[name] = existing.Concat(new[] { value }).ToArray();
     }
 }
 public override string GetKnownRequestHeader(int index)
 {
     string[] value;
     if (RequestHeaders.TryGetValue(KnownRequestHeaders[index], out value) &&
         value != null &&
         value.Length != 0)
     {
         if (value.Length == 1)
         {
             return(value[0]);
         }
         return(string.Join(", ", value));
     }
     return(null);
 }
示例#8
0
        public void ProduceContinue()
        {
            if (_responseStarted)
            {
                return;
            }

            StringValues expect;

            if (_httpVersion == HttpVersionType.Http1_1 &&
                RequestHeaders.TryGetValue("Expect", out expect) &&
                (expect.FirstOrDefault() ?? "").Equals("100-continue", StringComparison.OrdinalIgnoreCase))
            {
                SocketOutput.Write(_continueBytes);
            }
        }
示例#9
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));
 }
示例#10
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);
        }
        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());
        }
示例#12
0
        public void ProduceContinue()
        {
            if (_resultStarted)
            {
                return;
            }

            string[] expect;
            if (HttpVersion.Equals("HTTP/1.1") &&
                RequestHeaders.TryGetValue("Expect", out expect) &&
                (expect.FirstOrDefault() ?? "").Equals("100-continue", StringComparison.OrdinalIgnoreCase))
            {
                SocketOutput.Write(
                    new ArraySegment <byte>(_continueBytes, 0, _continueBytes.Length),
                    (error, _) =>
                {
                    if (error != null)
                    {
                        Trace.WriteLine("ProduceContinue " + error.ToString());
                    }
                },
                    null);
            }
        }
        public virtual void Initialize()
        {
            if (Player != null)
            {
                return;
            }

            if (MediaSession == null)
            {
                throw new ArgumentNullException(nameof(MediaSession));
            }

            if (RequestHeaders?.Count > 0 && RequestHeaders.TryGetValue("User-Agent", out string userAgent))
            {
                UserAgent = userAgent;
            }
            else
            {
                UserAgent = Util.GetUserAgent(Context, "MediaManager");
            }

            HttpDataSourceFactory = new DefaultHttpDataSourceFactory(UserAgent);

            if (RequestHeaders?.Count > 0)
            {
                foreach (var item in RequestHeaders)
                {
                    HttpDataSourceFactory.DefaultRequestProperties.Set(item.Key, item.Value);
                }
            }

            DataSourceFactory      = new DefaultDataSourceFactory(Context, null, HttpDataSourceFactory);
            DashChunkSourceFactory = new DefaultDashChunkSource.Factory(DataSourceFactory);
            SsChunkSourceFactory   = new DefaultSsChunkSource.Factory(DataSourceFactory);

            BandwidthMeter        = new DefaultBandwidthMeter();
            TrackSelectionFactory = new AdaptiveTrackSelection.Factory(BandwidthMeter);
            TrackSelector         = new DefaultTrackSelector(TrackSelectionFactory);
            MediaSource           = new ConcatenatingMediaSource();

            Player = ExoPlayerFactory.NewSimpleInstance(Context, TrackSelector);

            var audioAttributes = new Com.Google.Android.Exoplayer2.Audio.AudioAttributes.Builder()
                                  .SetUsage(C.UsageMedia)
                                  .SetContentType(C.ContentTypeMusic)
                                  .Build();

            Player.AudioAttributes = audioAttributes;

            //TODO: Use this in 2.9.0
            //Player.SetAudioAttributes(audioAttributes, true);

            PlayerEventListener = new PlayerEventListener()
            {
                OnPlayerErrorImpl = (exception) =>
                {
                    MediaManager.OnMediaItemFailed(this, new MediaItemFailedEventArgs(MediaManager.MediaQueue.Current, exception, exception.Message));
                },
                OnTracksChangedImpl = (trackGroups, trackSelections) =>
                {
                    MediaManager.MediaQueue.CurrentIndex = Player.CurrentWindowIndex;
                    //TODO: Update metadata of item here
                }
            };
            Player.AddListener(PlayerEventListener);

            PlaybackController    = new PlaybackController();
            MediaSessionConnector = new MediaSessionConnector(MediaSession, PlaybackController);

            QueueNavigator = new QueueNavigator(MediaSession);
            MediaSessionConnector.SetQueueNavigator(QueueNavigator);

            QueueDataAdapter    = new QueueDataAdapter(MediaSource);
            MediaSourceFactory  = new QueueEditorMediaSourceFactory();
            TimelineQueueEditor = new TimelineQueueEditor(MediaSession.Controller, MediaSource, QueueDataAdapter, MediaSourceFactory);
            MediaSessionConnector.SetQueueEditor(TimelineQueueEditor);

            RatingCallback = new RatingCallback();
            MediaSessionConnector.SetRatingCallback(RatingCallback);

            PlaybackPreparer = new MediaSessionConnectorPlaybackPreparer(Player, MediaSource);
            MediaSessionConnector.SetPlayer(Player, PlaybackPreparer, null);
        }