示例#1
0
        public void LogRequest(IOnPremiseConnectorRequest onPremiseConnectorRequest, IOnPremiseTargetReponse onPremiseTargetReponse, HttpStatusCode responseStatusCode, Guid linkId, string originId, string relayPath)
        {
            if (onPremiseConnectorRequest == null)
            {
                throw new ArgumentNullException(nameof(onPremiseConnectorRequest), "A client request must be set.");
            }

            var onPremiseTargetInformation = GetOnPremiseTargetInformation(onPremiseTargetReponse);
            var pathInformation            = _pathSplitter.Split(relayPath);

            _logRepository.LogRequest(new RequestLogEntry
            {
                LocalUrl                  = pathInformation.LocalUrl,
                HttpStatusCode            = responseStatusCode,
                ContentBytesIn            = GetContentByteCount(onPremiseConnectorRequest.Body),
                ContentBytesOut           = onPremiseTargetInformation.ContentBytesOut,
                OnPremiseConnectorInDate  = onPremiseConnectorRequest.RequestStarted,
                OnPremiseConnectorOutDate = onPremiseConnectorRequest.RequestFinished,
                OnPremiseTargetInDate     = onPremiseTargetInformation.OnPremiseTargetInDate,
                OnPremiseTargetOutDate    = onPremiseTargetInformation.OnPremiseTargetOutDate,
                OriginId                  = Guid.Parse(originId),
                OnPremiseTargetKey        = pathInformation.OnPremiseTargetKey,
                LinkId = linkId
            });
        }
示例#2
0
        public HttpResponseMessage BuildFrom(IOnPremiseTargetReponse onPremiseTargetReponse, Link link)
        {
            var response = new HttpResponseMessage();

            if (onPremiseTargetReponse == null)
            {
                response.StatusCode = HttpStatusCode.GatewayTimeout;
                response.Content    = new ByteArrayContent(new byte[] { });
                response.Content.Headers.Add("X-TTRELAY-TIMEOUT", "On-Premise");
            }
            else
            {
                response.StatusCode = onPremiseTargetReponse.StatusCode;
                response.Content    = GetResponseContentForOnPremiseTargetResponse(onPremiseTargetReponse, link);

                string wwwAuthenticate;
                if (onPremiseTargetReponse.HttpHeaders.TryGetValue("WWW-Authenticate", out wwwAuthenticate))
                {
                    var parts = wwwAuthenticate.Split(' ');
                    response.Headers.WwwAuthenticate.Add(parts.Length == 2 ? new AuthenticationHeaderValue(parts[0], parts[1]) : new AuthenticationHeaderValue(wwwAuthenticate));
                }
            }

            return(response);
        }
        public override async Task SendOnPremiseTargetResponse(string originId, IOnPremiseTargetReponse reponse)
        {
            CheckDisposed();

            _logger.Debug("Sending On-Premise Target response to origin '{0}'", originId);

            var queue = DeclareRelayServerQueue(originId);
            await _bus.Advanced.PublishAsync(Exchange.GetDefault(), queue.Name, false, false, new Message <string>(JsonConvert.SerializeObject(reponse)));
        }
示例#4
0
        internal OnPremiseTargetInformation GetOnPremiseTargetInformation(IOnPremiseTargetReponse onPremiseTargetReponse)
        {
            var onPremiseTargetInformation = new OnPremiseTargetInformation();

            if (onPremiseTargetReponse != null)
            {
                onPremiseTargetInformation.OnPremiseTargetInDate  = onPremiseTargetReponse.RequestStarted;
                onPremiseTargetInformation.OnPremiseTargetOutDate = onPremiseTargetReponse.RequestFinished;
                onPremiseTargetInformation.ContentBytesOut        = GetContentByteCount(onPremiseTargetReponse.Body);
            }

            return(onPremiseTargetInformation);
        }
        private void ForwardOnPremiseTargetResponse(IOnPremiseTargetReponse reponse)
        {
            _logger.Debug("Forwarding On-Premise Target response for request '{0}'", reponse.RequestId);

            IOnPremiseConnectorCallback onPremiseConnectorCallback;

            if (_callbacks.TryRemove(reponse.RequestId, out onPremiseConnectorCallback))
            {
                onPremiseConnectorCallback.Reponse = reponse;
                onPremiseConnectorCallback.Handle.Set();
            }
            else
            {
                _logger.Debug("No callback found for request '{0}'", reponse.RequestId);
            }
        }
示例#6
0
        public HttpResponseMessage BuildFrom(IOnPremiseTargetReponse onPremiseTargetReponse, Link link)
        {
            var response = new HttpResponseMessage();

            if (onPremiseTargetReponse == null)
            {
                response.StatusCode = HttpStatusCode.GatewayTimeout;
                response.Content    = new ByteArrayContent(new byte[] { });
                response.Content.Headers.Add("X-TTRELAY-TIMEOUT", "On-Premise");
            }
            else
            {
                response.StatusCode = onPremiseTargetReponse.StatusCode;
                response.Content    = GetResponseContentForOnPremiseTargetResponse(onPremiseTargetReponse, link);
            }

            return(response);
        }
示例#7
0
        internal HttpContent GetResponseContentForOnPremiseTargetResponse(IOnPremiseTargetReponse onPremiseTargetReponse, Link link)
        {
            if (onPremiseTargetReponse == null)
            {
                throw new ArgumentNullException("onPremiseTargetReponse", "On-Premise Target response must not be null here.");
            }

            if (onPremiseTargetReponse.StatusCode == HttpStatusCode.InternalServerError && !link.ForwardOnPremiseTargetErrorResponse)
            {
                return(null);
            }

            var content = new ByteArrayContent(onPremiseTargetReponse.Body ?? new byte[] { });

            SetHttpHeaders(onPremiseTargetReponse.HttpHeaders, content);

            return(content);
        }
示例#8
0
        public void Trace(IOnPremiseConnectorRequest onPremiseConnectorRequest, IOnPremiseTargetReponse onPremiseTargetReponse, Guid traceConfigurationId)
        {
            try
            {
                if (!Directory.Exists(_configuration.TraceFileDirectory))
                {
                    Directory.CreateDirectory(_configuration.TraceFileDirectory);
                }

                var filenamePrefix = $"{Path.Combine(_configuration.TraceFileDirectory, traceConfigurationId.ToString())}-{DateTime.Now.Ticks}";

                _traceFileWriter.WriteHeaderFile(filenamePrefix + OnPremiseConnectorHeaderExtension, onPremiseConnectorRequest.HttpHeaders);
                _traceFileWriter.WriteContentFile(filenamePrefix + OnPremiseConnectorContentExtension, onPremiseConnectorRequest.Body);

                _traceFileWriter.WriteHeaderFile(filenamePrefix + OnPremiseTargetHeaderExtension, onPremiseTargetReponse.HttpHeaders);
                _traceFileWriter.WriteContentFile(filenamePrefix + OnPremiseTargetContentExtension, onPremiseTargetReponse.Body);
            }
            catch (Exception ex)
            {
                _logger.Warn("Could not create trace", ex);
            }
        }
 public abstract Task SendOnPremiseTargetResponse(string originId, IOnPremiseTargetReponse reponse);